【题目】某大奖赛有n个选手参赛,m(m>2)个评委为依次参赛的选手评判打分:最高10分,最低0分。统分规则为:每个选手所得的m 个评分中,去掉一个最高分,去掉 个最低分,然后平均为该选手的最后得分。根据n个选手的最后得分从高到低排出名次表,以便确定获奖名单。使用数组方法实现程序设计。 【编程提示】定义3个数组:sh[i为第i个选手编号,fUj]为第j个评委给第i个选手的评分,sf为第i个选手的最后得分。对第i个选手,将每个fiU]累加到sfi]中,然后求最后得分sf=(sf]-max-min)/(m-2),将n个选手的最后得分sf根据冒泡法从高到低排序后输出。(用c语言)
时间: 2024-03-17 15:45:51 浏览: 514
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#define MAXN 100
int sh[MAXN], fj[MAXN][MAXN], n, m;
double sf[MAXN];
void bubble_sort() {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (sf[j] < sf[j + 1]) {
double temp = sf[j];
sf[j] = sf[j + 1];
sf[j + 1] = temp;
int t = sh[j];
sh[j] = sh[j + 1];
sh[j + 1] = t;
}
}
}
}
int main() {
scanf("%d%d", &n, &m); // 输入选手数量和评委数量
for (int i = 0; i < n; i++) {
scanf("%d", &sh[i]); // 输入选手编号
for (int j = 0; j < m; j++) {
scanf("%d", &fj[i][j]); // 输入评委评分
}
}
for (int i = 0; i < n; i++) {
int max = 0, min = 10; // 初始化最高分和最低分
double sum = 0;
for (int j = 0; j < m; j++) {
if (fj[i][j] > max) max = fj[i][j]; // 更新最高分
if (fj[i][j] < min) min = fj[i][j]; // 更新最低分
sum += fj[i][j];
}
sf[i] = (sum - max - min) * 1.0 / (m - 2); // 计算最终得分
}
bubble_sort(); // 排序
for (int i = 0; i < n; i++) {
printf("%d %.2f\n", sh[i], sf[i]); // 输出结果
}
return 0;
}
```
代码思路:
首先输入选手数量和评委数量,然后输入每个选手的编号和每个评委给该选手的评分。接着,对于每个选手,计算其最终得分,并存储在 `sf` 数组中。计算最终得分时,需要去掉一个最高分和一个最低分,因此需要先找到最高分和最低分。最后,使用冒泡排序将选手按照得分从高到低排序,并输出结果。
阅读全文