有m个选手n个评委,每个评委给所有选手打分。最后得分的计算规则为去掉一个最高分,去掉一个最低分后取平均分为最后得分。要求按得分从高到低排出名次,公布获奖名单。本题要求用行指针实现。1≤m,n≤10。请务必用冒泡排序。 输入格式: 输入共m+1行,第一行是m和n两个整数,其他行是m×n个整数。 输出格式: 输出一行,表示选手编号的一种排列(用%3d格式),这种排列代表得分从高到低的选手顺序。
时间: 2023-04-30 21:05:41 浏览: 612
题目描述:有m个选手评委,每个评委给所有选手打分。最后得分的计算规则为去掉一个最高分和一个最低分后的平均分。要求按得分从高到低排出名次,公布获奖名单。本题要求用行指针实现,1≤m,n≤10。请注意,采用冒泡排序。
输入格式:输入共m+1行,第一行是m和n,表示评委数和选手数。以下m行是一个m* n 的矩阵,第i行j列表示第i个评委对第j个选手的打分(实数,保留一位小数)。
输出格式:输出共1行,表示选手的排名,每个得分保留一位小数,数字和空格之间用一个空格隔开,行末不要有空格。
相关问题
有m个选手n个评委,每个评委给所有选手打分。最后得分的计算规则为去掉一个最高分,去掉一个最低分后取平均分为最后得分。要求按得分从高到低排出名次,公布获奖名单。本题要求用行指针实现。1≤m
≤100,1≤n≤10。
这道题目要求我们用行指针实现一个评分系统,其中有m个选手和n个评委,每个评委都会给所有选手打分。最后得分的计算规则是去掉一个最高分和一个最低分,然后取平均分作为最后得分。我们需要按照得分从高到低排出名次,并公布获奖名单。题目中给出的数据范围是1≤m≤100,1≤n≤10。
行指针是指一个指针数组,每个指针指向一个数组的首地址。在这道题目中,我们可以用一个二维数组来存储所有选手的得分,然后用行指针来实现按得分从高到低排出名次的功能。具体实现方法如下:
1. 定义一个二维数组score,用来存储所有选手的得分。
2. 定义一个指针数组rank,用来存储每个选手的排名。初始时,将所有选手的排名都设为0。
3. 对于每个选手,计算其得分。具体方法是先将该选手的所有评分从小到大排序,然后去掉一个最高分和一个最低分,再计算平均分。将该选手的得分存入score数组中。
4. 对于所有选手的得分,按照从高到低的顺序进行排序。具体方法是用行指针来实现,即将每行的指针存入一个指针数组中,然后对指针数组进行排序。排序后,每个指针所指向的行就是按得分从高到低排列的选手。
5. 遍历排好序的选手,依次给每个选手分配排名。具体方法是判断该选手的得分是否与前一个选手的得分相同,如果相同,则将该选手的排名设为前一个选手的排名;否则,将该选手的排名设为当前遍历到的选手的序号。
6. 输出获奖名单,即按照排名从小到大输出选手的编号。
以上就是用行指针实现评分系统的具体方法。
有m个选手n个评委,每个评委给所有选手打分。最后得分的计算规则为去掉一个最高分,去掉一个最低分后取平均分为最后得分。要求按得分从高到低排出名次,公布获奖名单。本题要求用行指针实现。1≤m,n≤10。请务必用冒泡排序。
以下是用行指针实现的代码,使用冒泡排序:
```c
#include <stdio.h>
void bubbleSort(float** scores, int m, int n) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < m - i - 1; j++) {
float sum1 = 0, sum2 = 0;
for (int k = 0; k < n; k++) {
sum1 += scores[j][k];
sum2 += scores[j+1][k];
}
float avg1 = (sum1 - scores[j][0] - scores[j][n-1]) / (n-2);
float avg2 = (sum2 - scores[j+1][0] - scores[j+1][n-1]) / (n-2);
if (avg1 < avg2) {
float* temp = scores[j];
scores[j] = scores[j+1];
scores[j+1] = temp;
}
}
}
}
int main() {
int m, n;
printf("请输入选手数和评委数:");
scanf("%d %d", &m, &n);
float scores[m][n];
float* ptrs[m];
for (int i = 0; i < m; i++) {
printf("请输入第%d个选手的%d个得分:", i+1, n);
for (int j = 0; j < n; j++) {
scanf("%f", &scores[i][j]);
}
ptrs[i] = scores[i];
}
bubbleSort(ptrs, m, n);
printf("排名\t平均分\n");
for (int i = 0; i < m; i++) {
float sum = 0;
for (int j = 1; j < n-1; j++) {
sum += ptrs[i][j];
}
float avg = sum / (n-2);
printf("%d\t%.2f\n", i+1, avg);
}
return 0;
}
```
这里使用了一个 `float*` 类型的数组 `ptrs`,其中每个元素指向 `scores` 数组的一行。
在排序过程中,我们需要计算每行得分的平均值,并使用冒泡排序将平均值较大的行移到数组的前面。
最后,我们根据排序后的数组,计算每行得分的平均值,并输出排名和平均分。注意,在计算平均分时,需要去掉每行得分中最高分和最低分。
阅读全文