当前位置:   article > 正文

航班时间 刷题笔记

航班时间 刷题笔记

思路参考大佬 个人空间 - AcWing

飞行时间推导

首先每组数据两行 

一行有两个数据

第一行第一个给出的是

去的时候从A地出发到B地的起飞时间

第一行第二个数据 是去的时候在B地降落的时间

第二行的第一个数据是

回程时到A地的降落时间

第二行第二个数据时

回程时在B地的起飞时间

时间推导

时间推导完毕接下来是读取

这里用到了scanf的特性

只有格式和scanf内的格式化字符一致

才能进行读入

scanf("%d:%d:%d (+%d)", &h[i], &m[i], &s[i], &f[i])

前三个必定被读入

只有当存在括号+%d时第四个数才会被读入 

读完之后处理数据算出结果即可

对于to_date函数 的计算 

真正秒数 等于 总秒数对60取模

总分钟数等于总秒数除以60;真正分钟数等于总分钟数对60取模;

总小时数等于 总分钟数/60

#include<bits/stdc++.h>
using namespace std;

int h[4], m[4], s[4], f[4],t[4];

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

void to_date(int s)
{    
    int m = s / 60; s %= 60;
    int h = m / 60; m %= 60;
    printf("%02d:%02d:%02d\n", h, m, s);
}

int main()
{
    int n; cin >> n;
    while (n--)
    {
        memset(f, 0, sizeof(f));
        for (int i = 0; i < 4; i++)
        {
            scanf("%d:%d:%d (+%d)", &h[i], &m[i], &s[i], &f[i]);//前三个必定会读入,第四个仅当格式为(+t)时才会被读入,否则本次读入结束
            if (f[i] == 1)h[i] += 24;
            if (f[i] == 2)h[i] += 48;
            t[i] = to_second(h[i], m[i], s[i]);
        }
        to_date(t[1] - t[0] + t[3] - t[2] >> 1);
    }
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/244247
推荐阅读
相关标签
  

闽ICP备14008679号