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;
}