蓝桥杯:航班时间

在这里插入图片描述
格式要求:
在这里插入图片描述
题解:深刻体会到scanf和printf在格式化输入输出的方便

#include<iostream>
#include <cstdio>
#include<cstring>
using namespace std;
//把时间换算成秒
int get_second(int h, int m, int s)
{
    return h * 3600 + m * 60 + s;
}
//读入一行时间数据
int get_time(){
    string line;
    //不能使用cin读入 因为遇空格停止
    getline(cin,line);
    if(line.back()!=')'){
        //在没有(+1)的数据后面添上(+0)
        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 * 24 * 3600;
}
int main(){
    /*
    假设出发时间为S,到达时间为E,时差为T,飞行时间为X,则列式:
    S1+X+T=E1;E2+T-S2 =X;整理得:X=(E1-S1)/2+(E2-S2)/2;
    式子得出,主要是输入输出操作
    */
    int n = 0;
    cin>>n;
    //读取一个换行到时间数据行
    string line;
    getline(cin, line);
    while(n--){
        int t = (get_time()+get_time())/2;
        //转换成时分秒
        int hour = t/3600;
        //得到除去小时数的剩余秒
        int minute = t%3600/60; 
        int second = t%60;
        printf("%02d:%02d:%02d\n", hour, minute, second);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值