今天是PTA题库解法讲解的第八天,今天我们要讲解天梯赛的赛场安排,题目如下:
解题思路:
这个问题的关键在于高效地为参赛学校的队员分配赛场,同时满足给定的条件。我们可以通过以下步骤解决这个问题:
-
存储每所学校的信息:我们可以使用一个数组来存储每所学校的参赛人数。
-
赛场分配:根据学校的参赛人数和每个赛场的规定容量,通过循环分配学校的队员到不同的赛场中。
-
输出结果:按照题目要求输出每所学校需要联系的监考人数,以及总共需要开设的赛场数量。
下面是相应的C语言实现:
#include <stdio.h>
#define MAX_SCHOOL 5000
typedef struct {
char name[7]; // 学校缩写,最多6个字符
int num; // 学校参赛人数
int supervisor; // 需要联系的监考人数
} School;
int main() {
int N, C;
scanf("%d %d", &N, &C);
School schools[MAX_SCHOOL];
int totalRooms = 0;
for (int i = 0; i < N; i++) {
scanf("%s %d", schools[i].name, &schools[i].num);
int neededRooms = (schools[i].num + C - 1) / C; // 计算每所学校需要的赛场数,向上取整
schools[i].supervisor = neededRooms; // 存储每所学校需要联系的监考人数
totalRooms += neededRooms; // 累加总赛场数
}
for (int i = 0; i < N; i++) {
printf("%s %d\n", schools[i].name, schools[i].supervisor);
}
printf("%d\n", totalRooms); // 输出总赛场数
return 0;
}
这段代码首先读取学校数量N和每个赛场的规定容量C,然后对每所学校进行处理,计算每所学校需要的赛场数,并累加到总赛场数中。最后,输出每所学校需要联系的监考人数和总赛场数。
本题部分没有通过,小伙伴们可以在评论区讨论,来个最优解哦~