Tiempo de vuelo C ++ (conversión de tiempo, simulación, control de entrada sscanf)

Xiao h fue a los Estados Unidos para participar en la Blue Bridge Cup International.
La novia de Xiao H descubrió que Xiao H partió a las 10 am y llegó a los Estados Unidos a las 12 de la mañana, por lo que suspiró que "el avión está volando tan rápido ahora, y tomará dos horas llegar a los Estados Unidos". Xiao H está muy aterrorizado por los vuelos supersónicos. Después de una cuidadosa observación, se descubrió que las horas de despegue y aterrizaje de la aeronave eran todas horas locales. Como hay una diferencia horaria de 12 horas entre Beijing y el este de Estados Unidos, la aeronave necesita un total de 14 horas de vuelo. Pronto, la novia de H se fue al Medio Oriente para intercambiar. Little h no conoce la diferencia horaria entre Oriente Medio y Beijing. Pero Xiao H consiguió el tiempo de vuelo de regreso de su novia. El pequeño quiere saber el tiempo de vuelo del vuelo de su novia. Para un vuelo que puede cruzar zonas horarias, dado el tiempo de despegue y aterrizaje de ida y vuelta. Suponiendo que el tiempo de vuelo del avión es el mismo, calcule el tiempo de vuelo del avión.
Formato de
entrada Una entrada contiene varios conjuntos de datos. La primera línea de entrada es un entero positivo T, que representa el número de grupos de datos de entrada.
Cada conjunto de datos contiene dos líneas, la primera línea es el tiempo de despegue y aterrizaje del viaje de ida y la segunda línea es el tiempo de despegue y aterrizaje del viaje de regreso.
Despegue y aterrizaje en el siguiente formato:
h1 de: M1: S1 H2: M2: S2
h1 de: M1: S1 H3: M3: S3 (+ 1'd)
h1 de: M1: S1 H4: M4: S4 (+2)
un primer formato El vuelo despegó a las h1: m1: s1, hora local, y aterrizó a las h2: m2: s2, hora local.
El segundo formato significa que el vuelo despega a las h1: m1: s1, hora local, y aterriza a las h2: m2: s2, al día siguiente, hora local.
El tercer formato significa que el vuelo despega a las h1: m1: s1, hora local, y aterriza a las h2: m2: s2, hora local del tercer día.
Formato de salida
Para cada grupo de datos, envíe una línea y una vez hh: mm: ss, lo que significa que el tiempo de vuelo es hh horas mm minutos ss segundos.
Tenga en cuenta que cuando la hora es de un solo dígito, se deben completar los ceros iniciales. Por ejemplo, tres horas, cuatro minutos y cinco segundos deben escribirse como 03:04:05.
rango de datos
Asegúrese de que el tiempo de entrada sea legal (0≤h≤23, 0≤m, s≤59) y que el tiempo de vuelo no supere las 24 horas.
Ejemplo de entrada:
3
17:48:19
21:57:24 11:05:18
15:14:23 17:21:07 00:31:46 (+1)
23:02:41 16:13:20 ( +1)
10:19:19 20:41:24 22:19:04 16:41:09
(+1)
Ejemplo de salida:
04:09:05
12:10:39
14:22:05

Código AC:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<string>

using namespace std;

int n;

int get_second(int hour,int minute,int second)
{
    
    
    return 3600*hour+60*minute+second;
}

int get_time()
{
    
    
    string line;
    getline(cin,line);
    //back可以得到最后一个字符;弄成统一格式方便之后处理
    if(line.back()!=')') line+=" (+0)";
    int h1,m1,s1,h2,m2,s2,d;
    //源字符串,格式串,读取数据存放位置
    sscanf(line.c_str(),"%d:%d:%d %d:%d:%d (+%d)",&h1,&m1,&s1,&h2,&m2,&s2,&d);

    return get_second(h2,m2,s2)-get_second(h1,m1,s1)+d*3600*24;
}

int main()
{
    
    
    scanf("%d",&n);
    string line;
    getline(cin,line);
    while(n--)
    {
    
    
        //往返的时差已相互抵消,相加÷2得到单程总秒数
        int time=(get_time()+get_time())/2;
        //时分秒转换
        int hour=time/3600,minute=(time%3600)/60,second=time%60;
        //不满2位就补0
        printf("%02d:%02d:%02d\n",hour,minute,second);
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_44643644/article/details/108891226
Recomendado
Clasificación