这个题涉及时间的比较,一开始用的小时分钟秒分别比较的方式,这样是比较麻烦的,实际上可以把时间存储为字符串,直接按照字典序比较即可。
小时分钟秒分别比较的方式:
采用sort的做法不好,因为没给定M的范围,所以数组不知道要开多大,因此还是边输入边比较记录最早和最晚时间对应的结构体才好。
#include <iostream>
#include <string.h>
#include <bits/stdc++.h>
#include<cstdio>
using namespace std;
struct Record{
char id[16];
int h1,m1,s1;
int h2,m2,s2;
}records[1005];
bool cmp1(struct Record a,struct Record b){
if(a.h1!=b.h1) {
//cout << a.h1 << " " << b.h1 << endl;
return a.h1<b.h1;
}
else if(a.m1!=b.m1) return a.m1<b.m1;
else if(a.s1!=b.s1) return a.s1<b.s1;
}
bool cmp2(struct Record a,struct Record b){
if(a.h2!=b.h2) return a.h2>b.h2;
else if(a.m2!=b.m2) return a.m2>b.m2;
else if(a.s2!=b.s2) return a.s2>b.s2;
}
int main() {
int M;
cin >> M;
getchar();
for(int i=0;i<M;i++){
scanf("%s %d:%d:%d %d:%d:%d",records[i].id,&records[i].h1,&records[i].m1,&records[i].s1,&records[i].h2,&records[i].m2,&records[i].s2);
}
sort(records,records+M,cmp1);
cout << records[0].id << " ";
sort(records,records+M,cmp2);
cout << records[0].id;
return 0;
}
字符串的比较方式:
要记得strcmp函数前者比后者小的话返回负数,等于返回0,大于返回正数
char[]数组用strcpy来赋值
#include <iostream>
#include <string.h>
#include<cstdio>
using namespace std;
struct Record{
char id[16];
char in[9],out[9];
};
int main() {
int M;
cin >> M;
getchar();
struct Record tmp,early,last;
strcpy(early.in,"23:59:59");
strcpy(last.out,"00:00:00");
for(int i=0;i<M;i++){
scanf("%s %s %s",tmp.id,tmp.in,tmp.out);
if(strcmp(tmp.in,early.in) < 0) early=tmp;//小的话返回负数,等于返回0,大于返回正数
if(strcmp(last.out,tmp.out) < 0) last=tmp;
}
cout << early.id << " " << last.id;
return 0;
}