航班时间 C++ 蓝桥杯

这篇博客讲述了如何处理包含时差信息的时间数据,计算两个时间点之间的平均飞行时间。通过读取输入的航班起止时间,考虑时差因素,利用公式2*q=Y1-X1+Y2-X2求解飞行时间,并给出了解析过程和代码实现。博主强调了输入处理的细节,尤其是括号和时差的处理,以及测试用例的重要性。

在这里插入图片描述在这里插入图片描述

输入示例
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
这个题经过推导,不管是先从时差早的地方先飞还是后飞,公式都不变。
设q为飞行时间。则2*q=Y1-X1+Y2-X2
就是说我们把得到的两个时间做差(注意是否要+1),然后求和除二即可。
这题的难点是输入的处理,我这里的方法是getchar判断改行是否存在括号。如果存在则读取数字并且在后面计算总时间的时候加上对应天数,如果不存在则标记为0。并且还要注意如果不存在后置小括号,则需要保存这个字符对应的数字并且在下一轮把他加到第一个数字上。
要不是这个题给的测试数据比较厚道,可以测试出我犯错的情况。我就寄了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int x[6],y[6];
    int duo1,duo2;
    char c;
    int last=0;
    int iend=0;
    for(int i=0;i<n;i++){
    	iend=0;
    	for(int j=0;j<2;j++){
    		scanf("%d:%d:%d %d:%d:%d ",&x[0],&x[1],&x[2],&x[3],&x[4],&x[5]);
    		if(last)	x[0]=x[0]+last*10;
    		c=getchar();
    		if(c=='('){//对每一行数据的最后一个字符进行特判 
    			scanf("+%d)",&duo1); 
    			last=0;
			}
			else	last=c-'0',duo1=0;//这里很重要,duo1是要清零的 
			
			int time1=x[0]*3600+x[1]*60+x[2];
			int time2=x[3]*3600+x[4]*60+x[5];
			iend+=(duo1*24*60*60+time2-time1);
		}
		iend/=2;
		printf("%02d:%02d:%02d\n",iend/3600,iend/60%60,iend%60);
	}
    return 0;
}
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值