检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。
题面
题目描述
名同学参加歌唱比赛,并接受 名评委的评分,评分范围是 0 到 10 分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下 个评分的平均数。请问得分最高的同学分数是多少?评分保留 2 位小数。
输入格式
无
输出格式
无
输入输出样例
输入#1
7 6
4 7 2 6 10 7
0 5 0 10 3 10
2 6 8 4 3 6
6 3 6 7 5 8
5 9 3 3 8 1
5 9 9 3 2 0
5 8 0 4 1 10
输出#1
6.00
思路
首先定义一个结构体,里面存放各个评委给出的分数、总分数和平均分。
然后写一个初始化函数:
node() {
memset(this->score, 0x00, sizeof(this->score));
all = sum = 0.00;
}
再写一个处理函数:
void t(int m) {
for (int i = 0; i < m; i++) {
cin >> score[i];
}
std::sort(score, score + m);
for (int i = 1; i + 1 < m; i++) {
sum += score[i];
}
all = sum / (m - 2.00);
}
这个处理函数分为了三部分:读入、排序和按题目要求计算平均分。
代码
#include <bits/stdc++.h>
using namespace std;
struct node {
int score[22];
double sum, all;
node() {
memset(this->score, 0x00, sizeof(this->score));
all = sum = 0.00;
}
void t(int m) {
for (int i = 0; i < m; i++) {
cin >> score[i];
}
std::sort(score, score + m);
for (int i = 1; i + 1 < m; i++) {
sum += score[i];
}
all = sum / (m - 2.00);
}
};
bool cmp(node a, node b) {
return a.all > b.all;
}
int main() {
int n, m;
node student[105];
cin >> n >> m;
for (int i = 0; i < n; i++) {
student[i].t(m);
}
sort(student, student + n, cmp);
printf("%.2lf", student[0].all);
return 0;
}