思路: 该题两个难点:
1.求时差,利用公式((返回时的结束时间 - 返回时的开始时间) + (到达时的结束时间-到达时的开始时间)) / 2
2.输入数据过于复杂,由于后面还有(+x),读入的格式可能不一样,所以不能用scanf来读,先使用getline来读取数据,然后将没有(+x)的数据加上(+x),再利用sscanf来读取,会用到c_str()来返回地址,详情见相关博客sscanf的使用和c_str()的使用
代码:
# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;
int get_secend(int h,int m,int s)
{
return h * 3600 + m * 60 + s;
}
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);
return get_secend(h2,m2,s2) - get_secend(h1,m1,s1) + d * 3600 * 24;
}
int main()
{
int t;
cin >> t;
string line;
getline(cin,line);//忽略掉第一行的回车
while(t--)
{
int time = (get_time() + get_time()) / 2;
int hour = time / 3600;
int minute = time % 3600 / 60;
int secends = time % 60;
printf("%02d:%02d:%02d\n",hour,minute,secends);
}
return 0;
}