题目描述
实验室的财产安全很重要,所以 , 坐在门口的大廖就负责登记一天的出入情况。
现给你一天的登记情况 ,试找出第一个进入的 id 和最后一个出去的 id。
输入
一次包含一组数据。
第1行为进入的人的个数 m
第2行到第m+1行为记录的情况
记录的格式如下 :ID_number Sign_in_time Sign_out_time
输出
输出第一个进入的 id , 和最后一个出去的 id
样例输入
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40
样例输出
SC3021234 CS301133
分析:
这里的话,我们可以直接用一个结构体。然后分别将开始时间,结束时间排序,并分别输出。排序是要注意,先看时,如果相等,在看分钟。
int main()
{
long long n,i,j,start[3],end[3],mid[3],mid1[3];
char sign_in_time[100],sign_out_time[100],sign_start_time[100],sign_end_time[100];
char ID[100],start1[100],end1[100];
scanf("%lld",&n);
// sign_start_time=0;
// sign_end_time=0;
mid[0]=mid[1]=mid[2]=0;
mid1[0]=mid1[1]=mid1[2]=0;
start[0]=start[1]=start[2]=25;
end[0]=end[1]=end[2]=0;
while(n--)
{
scanf("%s",ID);
scanf("%s",sign_in_time);
scanf("%s",sign_out_time);
mid[0]=(sign_in_time[0]-'0')*10+sign_in_time[1]-'0';
mid[1]=(sign_in_time[3]-'0')*10+sign_in_time[4]-'0';
mid[2]=(sign_in_time[6]-'0')*10+sign_in_time[7]-'0';
if(mid[0]<start[0])
{strcpy(start1,ID);start[0]=mid[0];start[1]=mid[1];start[2]=mid[2];}
else
if(mid[0]==start[0])
if(mid[1]<start[1])
{strcpy(start1,ID);start[0]=mid[0];start[1]=mid[1];start[2]=mid[2];}
else
if(mid[1]==start[1])
if(mid[2]<start[2])
{strcpy(start1,ID);start[0]=mid[0];start[1]=mid[1];start[2]=mid[2];}
//上面为对最早进来的操作,下面是对最晚出去的操作
mid1[0]=(sign_out_time[0]-'0')*10+sign_out_time[1]-'0';
mid1[1]=(sign_out_time[3]-'0')*10+sign_out_time[4]-'0';
mid1[2]=(sign_out_time[6]-'0')*10+sign_out_time[7]-'0';
if(mid1[0]>end[0])
{strcpy(end1,ID);end[0]=mid1[0];end[1]=mid1[1];end[2]=mid1[2];}
else
if(mid1[0]==end[0])
if(mid1[1]<end[1])
{strcpy(end1,ID);end[0]=mid1[0];end[1]=mid1[1];end[2]=mid1[2];}
else
if(mid1[1]==end[1])
if(mid1[2]<end[2])
{strcpy(end1,ID);end[0]=mid1[0];end[1]=mid1[1];end[2]=mid1[2];}
}
printf("%s %s\n",start1,end1);
}