7-1 找成绩 分数 15 作者 usx程序设计类课程组 单位 绍兴文理学院 给定n个同学的m门课程成绩,要求找出总分排列第k名(保证没有相同总分)的同学,并依次输出该同学的m门课程的成绩。 输入格式: 首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试包含两部分,第一行输入3个整数n、m和k(2≤n≤10,3≤m≤5,1≤k≤n);接下来的n行,每行输入m个百分制成绩。 输出格式: 对于每组测试,依次输出总分排列第k的那位同学的m门课程的成绩,每两个数据之间留一空格。 输入样例: 1 7 4 3 74 63 71 90 98 68 83 62 90 55 93 95 68 64 93 94 67 76 90 83 56 51 87 88 62 58 60 81 输出样例: 67 76 90 83 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB C (gcc) 1
时间: 2024-02-11 12:08:00 浏览: 113
以下是一种可能的实现方式:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 10
#define MAX_M 5
struct Student {
int id;
int score[MAX_M];
int total_score;
};
int cmp(const void *a, const void *b) {
const struct Student *pa = (const struct Student *)a;
const struct Student *pb = (const struct Student *)b;
return pb->total_score - pa->total_score;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
struct Student students[MAX_N];
for (int i = 0; i < n; i++) {
students[i].id = i + 1;
students[i].total_score = 0;
for (int j = 0; j < m; j++) {
scanf("%d", &students[i].score[j]);
students[i].total_score += students[i].score[j];
}
}
qsort(students, n, sizeof(struct Student), cmp);
printf("%d", students[k - 1].score[0]);
for (int j = 1; j < m; j++) {
printf(" %d", students[k - 1].score[j]);
}
printf("\n");
}
return 0;
}
```
首先读入测试数据的组数 T,然后进入 T 组测试数据的循环。对于每组测试数据,首先读入同学个数 n、课程数 m 和要求输出的同学排名 k。接下来,读入 n 行数据,每行包含 m 个整数表示一个同学的 m 门课程成绩。对于每个同学,计算其总成绩,并将所有同学按照总成绩从高到低排序。最后,输出第 k 名同学的每门课程成绩即可。
阅读全文