评委打分
内存限制: 256 Mb时间限制: 1000 ms
题目描述
许多比赛在计算选手得分平均数的时候,都会先去掉一个最高得分,再去掉一个最低得分,这样可以避免极大值与极小值对平均值的影响。
给定 n 个数字 a1,a2,⋯,an,表示一个选手获得的分数,请根据上述流程计算选手的最终得分。
注意如果有多个分数并列第一,则只会去掉一个最高分,去掉最低分的情况同理。
输入格式
第一行:单个整数 n;
第二行:n 个整数表示 a1,a2,⋯,an。
输出格式
一个浮点数:表示最终得分,四舍五入保留两位小数。
数据范围
- 对 50% 的数据,3≤n≤1000;
- 对 100% 的数据,3≤n≤100000;
- 0≤ai≤20000。
样例数据
输入:
5
100 1 20 30 40
输出:
30.00
说明:
(20+30+40)/3=30.00
解析:循环求出所有评委的评分和,最高分,最低分,然后用和减去最高分和最低分,除以评委人数减2,即为答案,详见代码:
#include <bits/stdc++.h>
using namespace std;
int a[100005];
int main() {
int n;
int mini, maxi;
long long sum;
double ans;
cin >> n;
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
sum = a[1];//和
mini = a[1];//最低值
maxi = a[1];//最高分
for (int i = 2; i <= n; i++) {
sum += a[i];
if (a[i] > maxi) {
maxi = a[i];
}
if (a[i] < mini) {
mini = a[i];
}
}
ans = double(sum - maxi - mini) / (n - 2);
printf("%.2f", ans);
return 0;
}