航班时间 (数学 模拟 输入)

1231. 航班时间

题意描述:

在这里插入图片描述

解题思路:
此题输入巨恶心,所以使用getline()读入后,再使用sscanf()处理,得到的时间再都转化为秒,相加减后得到总秒数再转化输出;
数学思想:去程时间差 与回程时间差 相加后抵消了地区时差,得到二倍的实际单程飞行时间;
sscanf()的使用方法入口

#include<iostream>
#include<cstring>
using namespace std;

int fun(int a ,int b, int c){
	return a * 3600 + b * 60 + c;
}

int get_time()
{
	string line;
	getline(cin,line);
	if(line.back()!=')') 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);
//cout<<line.c_str()[2]; 相当于一维数组名 c_str()成员函数功能:返回一个指针常量,指向字符串变量开头;
	return fun(h2 , m2 ,s2) - fun(h1, m1, s1) + d * 24* 3600; 
}
int main()
{
	int n;
	scanf("%d",&n);
	string line;
	getline(cin,line);
	while(n--)
	{
		int ans = (get_time()+get_time())/2 ;  
		int hour = ans/3600, minute = ans%3600/60 , second = ans%60;  // 巧妙转化;
		printf("%02d:%02d:%02d\n",hour,minute,second);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值