我的思路:
首先输入有几条记录,
然后输入签到和签离时间以及对应的人
比较签到时间的大小,首先比较签到时针,定义最早时针24,比较时针大小,如果输入时间比当前时针小,将输入时间赋给最早时针,如果时针相同比较分针,定义最早分针是60,如果分针相同就比较秒针,最后将时间最早的时刻对应的人输出;
同样输出最迟签离的人。
难点:如何将人员的代号与时间对应输出
源代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct pNode{
char id[20];
int hh,mm,ss;//ans1存放最早签到时间,ans2存放最晚签离时间
}temp,ans1,ans2;
bool great(pNode node1,pNode node2){
if (node1.hh!=node2.hh) return node1.hh>node2.hh;
if (node1.mm!=node2.mm) return node1.mm>node2.mm;
return node1.ss>node2.ss;
}
int main(){
int n;
scanf("%d",&n);
ans1.hh=24,ans1.mm=60,ans1.ss=60;
ans2.hh=0,ans2.mm=0,ans2.ss=0;
for (int i=0;i<n;i++){
//先读入签到时间
scanf("%s %d:%d:%d",temp.id,&temp.hh,&temp.mm,&temp.ss);
if(great(temp,ans1)==false) ans1 = temp;//ans1取更小的签到时间
//temp再作为签离时间读入
scanf("%d:%d:%d",&temp.hh,&temp.mm,&temp.ss);
if(great(temp,ans2)==false) ans2 = temp;//ans2取更大的签离时间
}
printf("%s %s\n",ans1.id,ans2.id);
return 0;
}
定义结构体,得出对应的人员代号