又是一个水题。。。。
代码:
第一种解法(结构体的,未通过编译,在VC上可以正常运行)
/***** HDOJ-1234-开门人和关门人 ********/ /******** written by C_Shit_Hu ************/ ////////////////结构体和字符串考察题目/////////////// /****************************************************************************/ /* Problem Description 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签 到、签离记录,请根据记录找出当天开门和关门的人。 Input 测试输入的第一行给出记录的总天数N ( > 0 )。下面列出了N天的记录。 每天的记录在第一行给出记录的条目数M ( > 0 ),下面是M行,每行的格式为 证件号码 签到时间 签离时间 其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。 Output 对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。 注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前, 且没有多人同时签到或者签离的情况。 */ /****************************************************************************/ // #include<stdio.h> #include<string.h> typedef struct person { char id[20], Start_time[20], End_time[20]; } person; // 根据题目定义结构体类型 // 主函数 int main() { int n,m,i,Max,Min; scanf("%d",&n); while(n--) { scanf("%d",&m); person s[100]; // 创建结构体实例 for(i=0;i<m;i++) scanf("%s %s %s", s[i].id, s[i].Start_time, s[i].End_time); // s输入测试数据 Max=Min=0; for(i=0;i<m;i++) { if( strcmp(s[i].Start_time, s[Min].Start_time)<0 ) Min=i; if( strcmp(s[i].End_time, s[Max].End_time)>0 ) Max=i; // 又是字符串比较函数 } printf("%s %s\n",s[Min].id,s[Max].id); // 输出相应的结果 } return 0; } /******************************************************/ /******************** 心得体会 **********************/ /* 水水更健康!!! */ /******************************************************/
代码:
#include <stdio.h> int main() { int n; scanf("%d",&n); while(n--) { char a[1000][16]; int i,m,s1,s2; scanf("%d",&m); s1=1; s2=2; for(i=0;i<m*3;i++) // 注意此处以及下面的3*m. scanf("%s",a[i]); for(i=4;i<m*3;i+=3) if(strcmp(a[i],a[1])<0) { strcpy(a[1],a[i]); s1=i; } for(i=5;i<m*3;i+=3) if(strcmp(a[i],a[2])>0) { strcpy(a[2],a[i]); s2=i; } printf("%s %s\n",a[s1-1],a[s2-2]); } return 0; }