第一道编程题

题目描述

在一场备受瞩目的综艺节目《超级明星》中,观众将通过投票选出他们最喜欢的选手。节目组邀请了n名专业评委(每位评委的评分范围是 0 到 100 的整数)来为选手打分,以确保评分的公正性和专业性。为了提高节目的观赏性和紧张感,节目组决定从第三位评委开始,每当一位评委给出打分后,立刻计算出该选手在前 i 名评委中的得分,去掉一个最高分和一个最低分,然后求出剩下 i-2 名评委的平均分,显示保留两位小数。这一过程将会在每次打分后自动进行,确保观众能够实时看到选手的评分变化。

现给定 n名评委的打分,要求从第三位评委开始,输出去掉一个最高分和一个最低分后的平均分,保留两位小数。

输入格式

· 第一行输入一个整数n,表示评委人数。
· 第二行输入 n 个整数,表示各个评委的打分(分数范围是 0 到 100)(每个分数之间使用一个空格隔开,最后一个整数之后不可有空格)。

输出格式

输出共 n-2 行,每行表示对应的平均分(保留两位小数)。

输入输出样例1:输入输出示例仅供调试,后台判题数据不包含示例

输入样例1:
6
11 45 14 19 19 81
输出样例1:
14.00
16.50
17.33
24.25

输入输出样例2:输入输出示例仅供调试,后台判题数据不包含示例

输入样例2:
8
55 23 87 45 34 90 76 12
输出样例2:
55.00
50.00
44.67
55.25
59.40
53.33

参考代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	vector<int>a(n+1);
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	for(int i=2;i<n;i++){
		//获取前i+1个分数 
		vector<int>b(a.begin(),a.begin()+i+1);
		//排序 
		sort(b.begin(),b.end());
		int sum=0;
		//算总分 
		for(int j=1;j<b.size()-1;j++){
			sum+=b[j];
		}	
		//算平均值 
		double avg=static_cast<double>(sum)/(b.size()-2);
		cout<<fixed<<setprecision(2)<<avg<<endl;	
	}
	return 0;
}
知识点复盘

1、意vector<int>a[n]和vector<int>a(n)的区别,前者是创建一个vector数组,包含n个vector对象,后者是创建一个单个vector,初始大小为n个元素。

2、static_cast指的是显式类型转换运算符

int sum = 100;        // 整数
int count = 3;        // 整数
double result = sum / count;  // 结果是 33.0,不是 33.333...

// 方法1:使用static_cast
double result = static_cast<double>(sum) / count;  // 结果是 33.333...

// 方法2:让其中一个操作数为double
double result = sum * 1.0 / count;  // 结果也是 33.333...

3、fixed:使用固定小数格式(而不是科学计数法)、setprecision(2):设置输出精度为2位小数

第二道编程题

题目描述

在某个大学里,图书馆刚刚进行了一次大规模的书籍整理和分类工作。为了庆祝图书馆的新开幕,馆长决定根据每位同学的学习成绩来公平分配新书籍。每位同学都渴望获得适合自己的书籍,以便进一步提升自己的学术水平。

图书馆中有n名同学,他们的成绩已经被记录下来。为了确保分配的公平性和激励性,馆长制定了一些规则来指导书籍的分配:

1.每位同学至少获得一本书。

2.相邻同学中,成绩更优秀的同学必须获得更多的书籍。如果相邻的两个同学成绩相同,则他们获得的书籍数量必须相等。

馆长希望在满足这些条件的前提下,分配的书籍总数尽可能少,以便为其他活动准备更多的资源。请你计算出至少需要准备多少本书。

输入格式

· 第一行输入一个整数n,表示学生数量。
· 第二行输入n个整数,表示n名同学的成绩。(整数中间使用一个空格隔开,最后一个整数不可有空格)

输出格式

输出一个整数,表示至少需要准备的书籍数量。

输入输出样例1:输入输出示例仅供调试,后台判题数据不包含示例

输入样例1:
5
3 4 5 4 3
输出样例1:
9
样例1说明:
每名同学分到的书籍数量分别是:1、2、3、2、1,所以至少需要准备9本书籍。

输入输出样例2:输入输出示例仅供调试,后台判题数据不包含示例

输入样例2:
15
5 5 6 7 7 7 8 9 9 8 7 6 5 4 4
输出样例2:
45

参考代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	vector<int>a(n);
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
//赋初始值为1
	vector<int>book(n,1);
	//左遍历,限制左约束 
	for(int i=1;i<n;i++){
		if(a[i]>a[i-1]){
			book[i]=book[i-1]+1;
		}else if(a[i]==a[i-1]){
			book[i]=book[i-1];
		}
	} 
	//右遍历,限制右约束
	for(int i=n-2;i>=0;i--){
		if(a[i]>a[i+1]){
			book[i]=max(book[i],book[i+1]+1); 
		}else if(a[i]==a[i+1]){
			book[i]=max(book[i],book[i+1]);
		}
	} 
	int sum=0;
	for(int i=0;i<n;i++){
		sum+=book[i];
	}
	cout<<sum<<endl;
	return 0;
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐