甲乙两人相距 d 公里,两人的行进速度分别为 v1 和 v2 公里/小时,从时刻 h1:m1:s1 同时出发同向而行,甲在前、乙在后,请计算乙追上甲的时刻 h2:m2:s2。
注:h1:m1:s1 和 h2:m2:s2 分别为两个时刻的时、分和秒,其中时和分为整数,秒为小数。
输入格式
d
v1 v2
h1:m1:s1
输出格式
若问题有解,则输出:h2:m2:s2
否则输出:None
要求:时间的输出格式为 hh:mm:ss.ss。秒数保留 2 位小数。
输入样例1
12.5
2.3 1.6
8:18:7.2
输出样例1
None
输入样例2
16.56
1.05 2.67
12:36:4.5
输出样例2
22:49:24.50
注:为方便计算,假定两人行走的时间均不到 1 天。
解题思路:转换成米然后计算,代码加了注释
#include<bits/stdc++.h>
using namespace std;
int main(){
double d,v1,v2,z,t,jl;
int x,y;
char _;
cin >> d >> v1 >> v2 >> x >> _ >> y >> _ >> z;
if(v1 >= v2){
cout << "None" << endl;
return 0;
}
// 将距离单位从千米转换为米
d *= 1000;
// 将速度单位从千米/小时转换为米/秒
v1 = v1 / 3.6;
v2 = v2 / 3.6;
// 计算追上所需的时间
t = d / (v2 - v1);
// 计算总的时间
jl = x * 3600 + y * 60 + z + t;
// 计算小时部分
x = jl / 3600;
x %= 24;
// 将总的时间转换为剩余的秒数
while(jl >= 3600)
jl -= 3600;
// 计算分钟部分
y = jl / 60;
// 将总的时间转换为剩余的秒数
while(jl >= 60)
jl -= 60;
// 输出结果,保留2位小数
printf("%02d:%02d:%05.2f\n", x, y, jl);
return 0;
}