题目描述:
现在有 𝑛(𝑛≤1000) 位评委给选手打分,分值从 00 到 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 位小数。
思路提供:
毫不犹豫我们会想到用数组来解决,同时因为每位评委打的分数可能不同,又因为按照规则我们需要去掉一个最高分和一个最低分,因此我们可以在使用函数sort来进行排序。我们也不知道有多少评委,因此我们可以选择用vector容器来装分数。所以进行排序后,去掉第一个和最后一个数据,就是题目所要求的,再求平均数。
代码实现:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n, num;
double s = 0.0;
vector<int> v;//定义一个整型vector容器
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num;//输入评委分数
v.push_back(num);//装进容器
}
sort(v.begin(), v.end());//对容器的数据进行排序
v.erase(v.begin());//删除排序后的第一个数据
v.pop_back(); //删除了排序后的最后一个数据
for (int i = 0; i < v.size(); i++)
s += v[i];//遍历所有数据,累加
double p = s / v.size();//求平均数
printf("%.2lf", p);
return 0;
}
注意事项:
1.在输入分数装进容器时,我们不能直接cin>>v[i],因为此时 vector
还没有元素,应该使用 push_back
方法来添加元素。
2.注意各变量的定义类型。