思路参考大佬 个人空间 - 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);
}
}