#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
using namespace std;
typedef struct per {
char ID[16];
int inTime;
int outTime;
} per;
int main(int argc, char *argv[]) {
int n;
cin >> n;
per person[n];
int i;
int inh, inm, ins, outh, outm, outs;
for (i = 0; i < n; i++) {
scanf("%s %d:%d:%d %d:%d:%d", person[i].ID, &inh, &inm, &ins, &outh, &outm, &outs);
person[i].inTime = inh * 3600 + inm * 60 + ins;
person[i].outTime = outh * 3600 + outm * 60 + outs;
}
int min = person[0].inTime;
int max = person[0].outTime;
int minper = 0;
int maxper = 0;
for (i = 0; i < n; i++) {
if (min > person[i].inTime) {
min = person[i].inTime;
minper = i;
}
if (max < person[i].outTime) {
max = person[i].outTime;
maxper = i;
}
}
cout << person[minper].ID << " " << person[maxper].ID << endl;
return 0;
}
另外找到一种简单的方法,利用字符串比较大小:
来源:http://www.codeweblog.com/pat-1006-sign-in-and-sign-out-25/
#include<stdio.h>
#include<string.h>
char firstPer[20];
char lastPer[20];
char firstTime[20] = "23:59:59";
char lastTime[20] = "00:00:00";
int main() {
int n;
scanf("%d", &n);
char id[20], in[20], out[20];
while (n--) {
scanf("%s%s%s", id, in, out);
if (strcmp(in, firstTime) < 0) {
strcpy(firstPer, id);
strcpy(firstTime, in);
}
if (strcmp(out, lastTime) > 0) {
strcpy(lastPer, id);
strcpy(lastTime, out);
}
}
printf("%s %s\n", firstPer, lastPer);
return 0;
}