1231.飛行時間

ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
アイデア:この質問には2つの問題があり
ます。1。時差を見つけるには、式((帰りの終了時間-帰りの開始時間)+(到着の終了時間-到着の開始時間))/ 22を使用し
ます。入力データ複雑すぎます。後ろに(+ x)​​があるため、読み取りの形式が異なる場合があります。したがって、scanfを使用して読み取り、最初にgetlineを使用してデータを読み取り、次に(+ x)​​を(+ x)​​なしでデータに追加することはできません。 + x)、次にsscanfを使用して読み取ると、c_str()を使用してアドレスが返されます。詳細については、関連ブログのsscanfの使用とc_str()の使用を参照してください。

コード:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;

int get_secend(int h,int m,int s)
{
    
    
    return h * 3600 + m * 60 + s;
}

int get_time()
{
    
    
    string line;
    getline(cin,line);
    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_secend(h2,m2,s2) - get_secend(h1,m1,s1) + d * 3600 * 24;
}

int main()
{
    
    
    int t;
    cin >> t;
    string line;
    getline(cin,line);//忽略掉第一行的回车
    while(t--)
    {
    
    
        int time = (get_time() + get_time()) / 2;
        int hour = time / 3600;
        int minute = time % 3600 / 60;
        int secends = time % 60;
        printf("%02d:%02d:%02d\n",hour,minute,secends);
    }
    
    return 0;
}

おすすめ

転載: blog.csdn.net/qq_45812180/article/details/114639673