题目描述
思路
这个其实就像一个解方程问题
设当地起飞a1,降落a2
到达地b1,降落b2
a2 = a1+飞行时间
b2 = b1 +飞行时间
则飞行时间 =[ (a2+b2)-(a1+b1) ]/ 2
代码
读入那里很巧妙,直接getchar,如果读入是时换行符,说明没有括号里面的东西了,可以借鉴
#include<bits/stdc++.h>
using namespace std;
const int N = 400010;
typedef long long ll;
ll a[N];
ll sum[N] ;//求个前缀和
ll res;
int get()
{
int h1,m1,s1,h2,m2,s2,d = 0;
scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);
int t1 = 3600*h1+60*m1+s1;
int t2 = 3600*h2+60*m2+s2;
char c = getchar();
if(c !='\n') //很巧妙,如果后面没东西了那肯定就是换行了
{
scanf("(%d)", &d);
}
int ans = t2 + 86400*d - t1; //飞行时间,再转化成hh:mm:ss格式
return ans;
}
int main()
{
int m;
cin >> m;
while(m--)
{
int ans = (get()+get())/2;
int s = ans % 60;
int h = ans/3600;
int m = ans%3600/60; //把它类比于取余10得个位,整除1000得千位
printf("%02d:%02d:%02d\n",h,m,s);
}
return 0;
}
总结
小学数学题,列公式!
对字符串的读入要尤为注意!可以读入之后再输出,看看是不是自己想要的