一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选手的最后得分。要求编程实现: (1)根据n个选手的最后得分,从高到低输出选手的得分名次表,以确定获奖名单; (2)根据各选手的最后得分与各评委给该选手所评分数的差距,对每个评委评分的准确性和评分水准给出一个定量的评价,每位评委的评分方法:(10 -(评委对选手x的评分 - x的得分)^2 的累加和),从高到低输出各评委得分的名次表。
时间: 2023-03-20 13:09:12 浏览: 104
这是一道关于大奖赛统分的一维数组实验题。题目要求编写程序,根据选手的最后得分,从高到低输出选手的得分名次表,以确定获奖名单。同时,还需要根据各选手的最后得分与各评委给该选手所评分数的差距,对每个评委评分的准确性和评分水准给出一个定量的评价,输出各评委得分的名次表。
相关问题
一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选
手的最终得分。请编写一个程序,输入每个选手的m个得分,输出每个选手的最终得分。
思路:对于每个选手,先将其m个得分从小到大排序,然后去掉最高分和最低分,再求平均值即可。
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
int n, m;
int score[MAXN][MAXN];
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> score[i][j];
}
sort(score[i] + 1, score[i] + m + 1); // 排序
int sum = ;
for (int j = 2; j <= m - 1; j++) { // 去掉最高分和最低分
sum += score[i][j];
}
cout << sum / (m - 2) << endl; // 求平均值
}
return ;
}
【题目】某大奖赛有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语言)
以下是使用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` 数组中。计算最终得分时,需要去掉一个最高分和一个最低分,因此需要先找到最高分和最低分。最后,使用冒泡排序将选手按照得分从高到低排序,并输出结果。
阅读全文