Descripción del Título
Para preguntas relativamente simples sobre el agua, solo necesita comparar la hora de llegada y la hora de salida, y crear una estructura para almacenar la hora más temprana y la hora más tardía para facilitar la comparación.
#include<iostream>
using namespace std;
struct da{
int hh;
int mm;
int ss;
};
int main(){
int n;
string fname,lname;
da earlier;
earlier.hh=24;
da last;
last.hh=0;
string name;
int hour,minute,second;
char c;
cin>>n;
while(n--){
cin>>name;
cin>>hour>>c>>minute>>c>>second;
if(hour<earlier.hh){
fname=name;
earlier.hh=hour;
earlier.mm=minute;
earlier.ss=second;}
else if(hour==earlier.hh){
if(minute<earlier.mm){
fname=name;
earlier.hh=hour;
earlier.mm=minute;
earlier.ss=second;
}
else if(minute==earlier.mm)
{
if(second<earlier.ss){
fname=name;
earlier.hh=hour;
earlier.mm=minute;
earlier.ss=second;
}
}
}
cin>>hour>>c>>minute>>c>>second;
if(hour>last.hh){
lname=name;
last.hh=hour;
last.mm=minute;
last.ss=second;
}
else if(hour==last.hh){
if(minute<last.mm)
{
lname=name;
last.hh=hour;
last.mm=minute;
last.ss=second;
}
else if(minute==last.mm)
{
if(second<last.ss)
{
lname=name;
last.hh=hour;
last.mm=minute;
last.ss=second;
}
}
}
}
cout<<fname<<" "<<lname<<endl;
}
Lea el código de los jefes escritos, su código es realmente largo y aburrido que no quería mirar ( plato )
para establecer una estructura, almacenar id y tiempo, sobrecargado <operador, porque la hora de llegada más temprana y simplemente dejar La id del persona con la última hora, por lo que no es necesario ordenar, simplemente compare los resultados durante el proceso de lectura.
#include<bits/stdc++.h>
using namespace std;
struct Person{
string id="";
int h,m,s;
Person(int hh=0,int mm=0,int ss=0):h(hh),m(mm),s(ss){
}
bool operator <(const Person&p)const{
//重载小于运算符
if(this->h!=p.h)
return this->h<p.h;
else if(this->m!=p.m)
return this->m<p.m;
else
return this->s<p.s;
}
};
int main(){
int N;
scanf("%d",&N);
Person p,minTime(INT_MAX,INT_MAX,INT_MAX),maxTime;
for(int i=0;i<N;++i){
cin>>p.id;
scanf("%d:%d:%d",&p.h,&p.m,&p.s);
minTime=min(minTime,p);
scanf("%d:%d:%d",&p.h,&p.m,&p.s);
maxTime=max(maxTime,p);
}
printf("%s %s",minTime.id.c_str(),maxTime.id.c_str());
return 0;
}
Comparar segundos
#include<iostream>
#include<string>
using namespace std;
int main(){
string s1,s2;
int n,max=0,min=86400;
cin>>n;
for(int i=0;i<n;i++){
string stu;
int h1,h2,m1,m2,se1,se2,t1,t2;
cin>>stu;
scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&se1,&h2,&m2,&se2);
t1=3600*h1+60*m1+se1;
t2=3600*h2+60*m2+se2;
if(t1<min){
s1=stu;min=t1;
}
if(t2>max){
s2=stu;max=t2;
}
}
cout<<s1<<' '<<s2;
}
Comparar cadenas
#include <iostream>
#include <string>
using namespace std;
string ansEarly, ansLate, early = "24:00:00", late = "00:00:00";
int main(){
int n;
scanf("%d",&n);
for(int i = 0; i < n; ++ i){
string temp, tempIn, tempOut;
cin>>temp>>tempIn>>tempOut;
if(tempIn < early){
ansEarly = temp;
early = tempIn;
}
if(tempOut > late){
ansLate = temp;
late = tempOut;
}
}
printf("%s %s", ansEarly.c_str(), ansLate.c_str());
}