完成一个以C语言编写的程序,情形如下:某次程序设计竞赛时,最终排名采用的排名规则如下: 根据成功做出的题数(设为solved)从大到小排序,若solved相同则按输入顺序确定排名先后顺序(请结合输出样例)。请确定最终排名并输出。输入格式要求首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 每组测试数据先输入1个正整数n(1 ≤ n ≤ 100),表示参赛队伍总数。然后输入n行,每行包括1个字符串s(不含空格且长度不超过100)和1个正整数d(0 ≤d ≤ 15),分别表示队名和该队的解题数量。 输出格式要求对于每组测试数据,输出最终排名。每行一个队伍的信息:排名、队名、解题数量
时间: 2023-06-09 21:05:36 浏览: 166
你好!感谢您的提问。
以下是以C语言编写的程序,可实现您的要求:
```
#include <stdio.h>
#include <string.h>
#define MAX_TEAM 100
struct Team {
char name[101]; // 队名
int solved; // 解题数量
int rank; // 排名
};
struct Team teams[MAX_TEAM];
int main() {
int t, n, i, j, k;
scanf("%d", &t);
for (i = 0; i < t; i++) {
scanf("%d", &n);
for (j = 0; j < n; j++) {
scanf("%s", teams[j].name);
scanf("%d", &teams[j].solved);
teams[j].rank = j + 1; // 初始排名为输入顺序
}
// 计算排名
for (j = 0; j < n; j++) {
for (k = j + 1; k < n; k++) {
if (teams[k].solved > teams[j].solved ||
(teams[k].solved == teams[j].solved && teams[k].rank < teams[j].rank)) {
// 如果比当前队伍排名高,则交换位置
struct Team temp = teams[j];
teams[j] = teams[k];
teams[k] = temp;
}
}
// 更新排名
teams[j].rank = j + 1;
}
// 输出结果
for (j = 0; j < n; j++) {
printf("%d %s %d\n", teams[j].rank, teams[j].name, teams[j].solved);
}
}
return 0;
}
```
希望能够帮到您!如果您还有其他问题,请继续提问。
阅读全文