由于很多情况下时间输入不一定会是按照正常的24小时方式输入,有时会输入25:100:30这种非常规时间,所以考虑这种情况的时候最好是把时间最终
转换成秒,然后再排序。
上次的腾讯马拉松的
小Q系列故事-世界上最遥远的距离 这一题一开始是分别计算小时,分钟和秒,然后计算是否超过60分钟、秒,模拟时钟的计算,但是总是WA,后来改成吧所有时间都改为秒,然后计算就过了。。
修正后提交AC了的:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Student
{
char number[20];
int p;
int inh,inm,ins;
int outh,outm,outs;
int inall,outall;
}student;
//对来的时间进行排序
int cmp1(const void *a, const void *b)
{
return (*(Student*)a).inall - (*(student*)b).inall;
}
//对离开时间进行排序
int cmp2(const void *a, const void *b)
{
return (*(student*)b).outall - (*(student*)a).outall;
}
int main()
{
int n,m,i,j;
char c;
student a[100];
scanf("%d",&n);
// printf("n=%d ",n);
while(n--)
{
scanf("%d",&m);
// printf("m=%d\n",m);
for(i = 0; i < m; i++)
{
getchar();
a[i].p = 0;
j = 0;
while(scanf("%c",&c) && c != ' ')
{
a[i].number[j] = c;
// printf("%c ",a[i].number[j]);
j++;
}
a[i].p = j;
scanf("%d:%d:%d",&a[i].inh,&a[i].inm,&a[i].ins);
scanf("%d:%d:%d",&a[i].outh,&a[i].outm,&a[i].outs);
a[i].inall = a[i].inh * 3600 + a[i].inm * 60 + a[i].ins;
a[i].outall = a[i].outh * 3600 + a[i].outm * 60 + a[i].outs;
// printf("inall:%d\noutall:%d\n",a[i].inall,a[i].outall);
}
// printf("OK\n");
qsort(a,m,sizeof(a[0]),cmp1);
// printf("OK\n");
for(i = 0; i < a[0].p; i++)
{
printf("%c",a[0].number[i]);
}
printf(" ");
qsort(a,m,sizeof(a[0]),cmp2);
for(i = 0; i < a[0].p; i++)
{
printf("%c",a[0].number[i]);
}
printf("\n");
}
return 0;
}