学校要举行教工拔河比赛了,计算机系的老师们为了取得好的成绩,决定使用最胖的老师参赛,你能帮助老师们挑出参赛的队员吗? 按照比赛的要求,计算机系需要派出5男5女的阵容参赛。 输入说明: 在输入的数据中,第一行是个整数N(10<=N<=100),接下来的N行数据中,每行是一位老师的姓名,体重,性别的信息,所有老师的姓名和体重不会重复,性别以M和F表示男女,男女教师的个数分别>=5。 输出说明: 你的输出应该是10行,是参赛的10位老师的姓名,并且前5个是男老师,后5个是女老师,分别以体重的降序排列。 用c语言写
时间: 2024-03-10 07:48:13 浏览: 48
教职工拔河比赛活动方案.pdf
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 100
struct Teacher {
char name[20];
int weight;
char gender;
};
int cmp(const void *a, const void *b) {
return ((struct Teacher *)b)->weight - ((struct Teacher *)a)->weight;
}
int main() {
int n;
struct Teacher teachers[MAX_N];
int male_cnt = 0, female_cnt = 0;
for (int i = 0; i < MAX_N; i++) {
scanf("%s %d %c", teachers[i].name, &teachers[i].weight, &teachers[i].gender);
if (teachers[i].gender == 'M') male_cnt++;
else female_cnt++;
if (i == 0) n = teachers[i].weight; // 记录总人数
if (i == n - 1) break; // 已读入全部老师信息
}
qsort(teachers, n, sizeof(struct Teacher), cmp);
int male_idx = 0, female_idx = 0;
while (male_idx < 5 || female_idx < 5) {
if (teachers[male_idx].gender == 'M' && male_idx < 5) {
printf("%s\n", teachers[male_idx].name);
male_idx++;
} else if (teachers[female_idx].gender == 'F' && female_idx < 5) {
printf("%s\n", teachers[female_idx].name);
female_idx++;
} else if (male_idx < 5) {
printf("%s\n", teachers[male_idx].name);
male_idx++;
} else if (female_idx < 5) {
printf("%s\n", teachers[female_idx].name);
female_idx++;
}
}
return 0;
}
```
阅读全文