歌唱比赛有10个评委,分别给出1~100分,除去一个最高分,再除去一个最低分,剩余8个人的给分的平均值作为选手的最终得分,编写一个C++程序找出评分最公平的评委。
时间: 2024-04-29 07:23:47 浏览: 126
以下是一个可能的解法:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 10
int main() {
int scores[N][N]; // 存储所有评委的分数
int min_score = 101; // 最低得分
int max_score = -1; // 最高得分
int min_judge, max_judge; // 最低得分和最高得分的评委编号
double total_scores[N] = {0}; // 存储所有评委的总分数
double avg_scores[N] = {0}; // 存储所有评委的平均分数
double min_diff = 101; // 最小的得分差距
int fair_judge; // 最公平的评委编号
// 输入所有评委的分数
for (int i = 0; i < N; i++) {
printf("Please enter the scores of judge %d:\n", i + 1);
for (int j = 0; j < N; j++) {
scanf("%d", &scores[i][j]);
// 更新最高得分和最低得分
if (scores[i][j] > max_score) {
max_score = scores[i][j];
max_judge = i;
}
if (scores[i][j] < min_score) {
min_score = scores[i][j];
min_judge = i;
}
}
}
// 计算每个评委的总分数和平均分数
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (i != min_judge && i != max_judge) {
total_scores[i] += scores[i][j];
}
}
avg_scores[i] = total_scores[i] / 8;
}
// 找出最公平的评委
for (int i = 0; i < N; i++) {
double diff = 0;
for (int j = 0; j < N; j++) {
if (i != min_judge && i != max_judge) {
diff += abs(avg_scores[i] - scores[i][j]);
}
}
if (diff < min_diff) {
min_diff = diff;
fair_judge = i;
}
}
printf("The fairest judge is judge %d.\n", fair_judge + 1);
return 0;
}
```
该程序的思路如下:
1. 定义一个二维数组 `scores` 存储所有评委的分数;
2. 输入所有评委的分数,并同时更新最高得分和最低得分;
3. 计算每个评委的总分数和平均分数,其中不考虑最高得分和最低得分;
4. 对于每个评委,计算其评分与其他评委的平均分之差的绝对值之和,找出这个值最小的评委,即为最公平的评委。
需要注意的是,在计算每个评委的总分数和平均分数时,需要排除最高得分和最低得分,因此在输入分数时需要同时更新它们的值和编号。此外,在计算每个评委的得分差距时,也需要排除最高得分和最低得分,因此需要在循环中加入判断条件。
阅读全文