软件基地全天向集训队员开放,不过对同学们会有一些纪律上的要求,即每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现在有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。 输入要求 测试数据的第一行给出记录的总天数N(>0)。 接着会列出这N天的记录。 每天的记录在第一行先给出记录的条目数M (>0),表示当天的记录有几条。下面是M行,每行的格式为: 证件号码 签到时间 签离时间 其中时间按“时:分:秒”(各占2位)给出,证件号码是长度不超过15的字符串。 输出要求 对每一天的记录输出1行结果,即当天开门和关门人的证件号码,中间用一个空格分隔。 注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有多人同时签到或者签离的情况。c语言
时间: 2024-02-20 09:56:59 浏览: 84
以下是C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
struct Record {
char id[20];
char in_time[10];
char out_time[10];
};
int main() {
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
int M;
scanf("%d", &M);
struct Record records[M];
for (int j = 0; j < M; j++) {
scanf("%s %s %s", records[j].id, records[j].in_time, records[j].out_time);
}
char first_in_id[20], last_out_id[20];
strcpy(first_in_id, records[0].id);
strcpy(last_out_id, records[0].id);
for (int j = 1; j < M; j++) {
if (strcmp(records[j].in_time, records[0].in_time) < 0) {
strcpy(first_in_id, records[j].id);
}
if (strcmp(records[j].out_time, records[0].out_time) > 0) {
strcpy(last_out_id, records[j].id);
}
}
printf("%s %s\n", first_in_id, last_out_id);
}
return 0;
}
```
代码思路:
1. 读入记录的总天数N。
2. 对于每一天的记录,先读入记录的条目数M,再读入M条记录。
3. 遍历当天的所有记录,找出第一个进入机房的人和最后一个离开机房的人。
4. 输出当天开门和关门人的证件号码。
阅读全文