题目描述
思路
这个其实就像一个解方程问题
设当地起飞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;
}
总结
小学数学题,列公式!
对字符串的读入要尤为注意!可以读入之后再输出,看看是不是自己想要的