又是一个水题。。。。
代码:
第一种解法(结构体的,未通过编译,在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;
}
/******************************************************/
/******************** 心得体会 **********************/
/*
水水更健康!!!
*/
/******************************************************/
第二种:(只用字符串数组,看似简单一点了。正常AC。)
代码:
#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;
}
学好字符串。c语言的一小半。。。