AcWing1231-航班时间

文章目录

  • 题目
  • 输入格式
  • 输出格式
  • 数据范围
  • 输入样例
  • 输出样例
  • 思路
  • 代码

题目

AcWing1231-航班时间_第1张图片

输入格式

AcWing1231-航班时间_第2张图片

输出格式

在这里插入图片描述

数据范围

在这里插入图片描述

输入样例

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)

输出样例

04:09:05
12:10:39
14:22:05

思路

  • scanf(“%d\n”,&n)去读取n;
  • 读入字符串的时候要使用getline;
  • sscanf的作用:
    从一个字符串中读进于指定格式相符的数据。利用它可以从字符串中取出整数、浮点数和字符串;
  • s.back()!=’)'判断line中最后一个字符是不是);而s.end()返回的是最后一个字符的下一个位置;
  • c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同s.c_str();
  • 东半球飞向西半球加时差。
    西半球飞向东半球减时差。
    飞行的时间=到的时间-来的时间+时差。
    飞行的时间=回去的时间-现在的时间-时差。
    所以飞行的时间=[(end2-begin2)+(end1-begin1)] / 2;

代码

#include 
#include 
#include 
#include 

using namespace std;

int n;

int gs(int h, int m, int s)//得到具体的秒数
{
    return h * 60 * 60 + m * 60 + s;
}

int gt()//从字符串中读出时间
{
    string s;
    getline(cin, s);
    
    if(s.back() != ')') //如果最后一位不是')',就意味时间没有横跨一天
        s += "(+0)";//统一个数,方便下面sccanf读入数据
    
    int h1, m1, s1, h2, m2, s2, d;
    sscanf(s.c_str(), "%d:%d:%d %d:%d:%d (+%d)", &h1, &m1, &s1, &h2, &m2, &s2, &d);
     
    return gs(h2, m2, s2) - gs(h1, m1, s1) + d * 24 * 60 * 60;
}

int main()
{
    scanf("%d\n", &n);//其中的\n是用来消化读入数据个数后面的回车的
    

    while(n--)
    {
        int time = (gt() + gt()) / 2;
        int h = time / 3600;
        int m = time % 3600 / 60;
        int s = time % 60;
        
        printf("%02d:%02d:%02d\n", h, m, s);
    }
    return 0;
}

你可能感兴趣的:(算法,c++)