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

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;
}
发布了31 篇原创文章 · 获赞 2 · 访问量 1461

猜你喜欢

转载自blog.csdn.net/weixin_44851176/article/details/104189637