解题排行榜中,按解题总数生成排行榜。假设每个学生信息仅包括学号、解题总数;要求先输入n个学生的信息;然后按“解题总数”降序排列,若“解题总数”相同则按“学号”升序排列。 输入格式: 首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 每组测试数据先输入1个正整数n(1 ≤ n ≤ 100),表示学生总数。然后输入n行,每行包括1个不含空格的字符串s(不超过8位)和1个正整数d,分别表示一个学生的学号和解题总数。 用C语言写出程序
时间: 2024-02-13 14:04:54 浏览: 148
好的,以下是用 C 语言实现的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char id[9];
int score;
} Student;
int cmp(const void *a, const void *b) {
const Student *s1 = (const Student *) a;
const Student *s2 = (const Student *) b;
if (s1->score != s2->score) {
return s2->score - s1->score;
} else {
return strcmp(s1->id, s2->id);
}
}
int main() {
int t;
scanf("%d", &t); // 输入测试数据组数
while (t--) {
int n;
scanf("%d", &n); // 输入学生总数
Student students[n];
for (int i = 0; i < n; i++) {
scanf("%s%d", students[i].id, &students[i].score); // 输入学生的学号和解题总数
}
qsort(students, n, sizeof(Student), cmp); // 按解题总数降序排列,若解题总数相同则按学号升序排列
for (int i = 0; i < n; i++) {
printf("%s %d\n", students[i].id, students[i].score); // 输出排名结果
}
}
return 0;
}
```
这个程序定义了一个 `Student` 结构体来保存每个学生的信息,包括学号和解题总数。程序使用 `qsort` 函数对学生信息进行排序,排序的依据是先按解题总数降序排列,再按学号升序排列。最后,程序输出排名结果。注意,在 C 语言中,字符串需要使用字符数组来表示,因此在输入和输出学号时需要使用 `%s` 格式化符号。
阅读全文