题目描述
临近期末,大家去自习的频率多了很多。现在想统计202教室,一天下来,谁自习的时间最多。
输入要求
第一行输入n。表示一共有n个记录(n < = 100 )。
接下来n行,每行三个数据,分别是姓名,到达时间跟离开时间(姓名长度不超过20)。
输出要求
自习时间最多的姓名。
输入样例
3
Jim 14:22 16:22
Lucy 12:00 13:45
Kate 8:30 11:30
输出样例
Kate
#include<stdio.h>
struct stu {
char name[20] = {'\0'};
int time[2];
};
int main()
{
char zfc[50];
int n;
stu s[100];
scanf_s("%d", &n);
getchar();
for (int i = 0; i < n; i++) {
int kg = 0, a = 0, b = 0, c = 0, d = 0, k = 1;
gets_s(zfc);
for (int j = 0; zfc[j] != '\0'; j++) {
if (zfc[j] != ' ')
{
if (kg == 0) {
s[i].name[j] = zfc[j];
}
else if (kg == 1) {
if (zfc[j] == ':')k++;
else if (k == 1)a = a * 10 + zfc[j] - '0';
else if (k == 2)b = b * 10 + zfc[j] - '0';
}
else if (kg == 2) {
if (zfc[j] == ':')k++;
else if (k == 2)c = c * 10 + zfc[j] - '0';
else if (k == 3)d = d * 10 + zfc[j] - '0';
}
}
else kg++;
}
if (d < b) {
s[i].time[1] = 60 + d - b;
c--;
}
else s[i].time[1] = d - b;
s[i].time[0] = c - a;
}
int max = 0;
for (int i = 1; i < n; i++) {
if (s[i].time[0] > s[max].time[0])max = i;
else if (s[i].time[0] == s[max].time[0] && s[i].time[1] > s[max].time[1])max = i;
}
printf("%s\n", s[max].name);
}