编写c程序 2023年8月我校将承办第11届“全国大学生光电设计竞赛”的总决赛。其中一个项目是“迷宫寻宝”光电智能小车赛项。决赛环节以每支队伍完成任务的时间决定名次。时间越短者,得分越高,即成绩越高。请同学们帮助学校组委会编写一个程序,根据每支队伍完成任务的时间,按成绩从低到高顺序输出各支队伍的比赛排名,若完成任务的时间相同,则队名按字典序小的在前(即,队伍名字 字典序小的队伍成绩分数相对低,注意参照测试样例2)。(假设没有重名的队伍) 注意提示:利用结构体编写。 输入格式: 第一行,一个整数n,范围在[1-·.80],代表参赛队伍数量,输入格式:“%d";接下来n行,每行分别含有每 个队伍的名字和比赛时间,即,队名 时间,中间用单个空格隔开,输入格式:“%s%d”;队名字符串长度在 [1·.10],均为小写字母;每支参赛队伍花费的比赛时间time,在int范围内。 输出格式: 依次输出每个参赛队伍的成绩排名(按从低到高的顺序排列并输出),每行包含队名和时间,彼此用空格间 隔。 成绩从低到高顺序排序后的队伍输出格式:“%s%d\n“(注意%s 后面有一个空格) 注意1:不进行输入正确行检查。
时间: 2023-11-28 07:05:48 浏览: 76
以下是一个示例程序,可以实现该功能:
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 80
#define MAX_NAME_LEN 10
// 定义队伍结构体
struct Team {
char name[MAX_NAME_LEN + 1]; // 队名
int time; // 完成任务的时间
};
// 比较函数,用于排序
int cmp(const void *a, const void *b) {
const struct Team *teamA = (const struct Team *) a;
const struct Team *teamB = (const struct Team *) b;
if (teamA->time != teamB->time) {
return teamA->time - teamB->time;
} else {
return strcmp(teamA->name, teamB->name);
}
}
int main() {
int n;
struct Team teams[MAX_N];
// 读入队伍信息
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s %d", teams[i].name, &teams[i].time);
}
// 排序
qsort(teams, n, sizeof(struct Team), cmp);
// 输出结果
for (int i = 0; i < n; i++) {
printf("%s %d\n", teams[i].name, teams[i].time);
}
return 0;
}
```
程序中用结构体 `Team` 存储每个队伍的信息,其中包括队名和完成任务的时间。使用 `qsort` 函数对队伍信息进行排序,排序规则是先按完成任务的时间从小到大排序,若时间相同则按队名的字典序从小到大排序。最后按顺序输出排名即可。
阅读全文