PAT 1006 Iniciar y cerrar sesión (25) (C ++)

Descripción del Título

Inserte la descripción de la imagen aquí
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());
}

Supongo que te gusta

Origin blog.csdn.net/qaqaqa666/article/details/112546112
Recomendado
Clasificación