题意大致就是给定距离s,速度v,求一个时刻出发,使得yyy在7:50到达
先看代码(?
#include <iostream>
using namespace std;
int main(){
int s, v, t, H, M;
scanf("%d%d", &s, &v);
t = (s + v - 1 ) / v;
if (t <= 470){
H = (470 - t) / 60, M = (470 - t) % 60;
} else{
H = (1440 + 470 - t) / 60, M = (1440 + 470 - t) % 60;
}
printf("%02d:%02d", H, M);
return 0;
}
下面来解释代码
t = (s + v - 1 ) / v; //这是在向上取整
470 = 7 * 60 + 50;
1440 = 24 * 60;
为什么要这么算呢
因为任意一个时间,都可以对应一个数字HH * 60 + MM
其含义是,从00:00开始的第几分钟
所以只要算出,从第几分钟出门就行。然后问题就转变成了
已知HH * 60 + MM ,求HH、MM
假定T = HH * 60 + MM ,那么也就是
HH = T / 60, MM = T % 60
然后再额外判断一下是当天还是前一天就行
// 7 * 60 + 50 = 470 24 * 60 = 1440
if (t <= 470){ // 说明是在当天
H = (470 - t) / 60, M = (470 - t) % 60;
} else{ //说明是在前一天
H = (1440 + 470 - t) / 60, M = (1440 + 470 - t) % 60;
}
如果是精确到秒的题目,对应数字就是HH * 3600 + MM * 60 + SS,表示从00:00:00开始的第几秒