1. 题目:
题目描述
学校和 yyy 的家之间的距离为 $s$ 米,而 yyy 以 $v$ 米每分钟的速度匀速走向学校。
在上学的路上,yyy 还要额外花费 $10$ 分钟的时间进行垃圾分类。
学校要求必须在上午 $\textrm{8:00}$ 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。
由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。
输入格式
一行两个正整数 $s,v$,分别代表路程和速度。
输出格式
输出一个 $24$ 小时制下的时间,代表 yyy 最晚的出发时间。
输出格式为 $\texttt{HH:MM}$,分别代表该时间的时和分。必须输出两位,不足前面补 $0$。
样例 #1
样例输入 #1
100 99
样例输出 #1
07:48
提示
对于 100%的数据 1≤s,v≤10^4。
2.思路:
首先通过S、V计算路程所用时间(单位min)。后加10min得到总的时间t。
再通过运算转换为小时与分钟。
最后注意细节处理。如:不够一分钟取整、输出时加不加“0”……
输出。
3.源码:
#include <iostream>
using namespace std;
int s, v, t, h, m;
int hour, minute;//最终输出的两个数
int main() {
cin >> s >> v;
t = s / v;
if (s % v != 0) {
t++;
}
//加上垃圾分类耗时得到总时间
t = t + 10;
h = t / 60 + 1;
m = t % 60;
minute = 60 - m;
hour = 8 - h;
//使x:60变为x+1:00
if (minute == 60) {
minute = 0;
hour++;
}
//处理前一天的时间表示
if (hour < 0) {
hour = 24 + hour;
}
//处理输出:输出的小时和分钟要输出两位,不足10的时候要补0。
//分开处理小时和分钟
if (hour < 10) {
cout << "0" << hour;
} else {
cout << hour;
}
cout << ":";
if (minute < 10) {
cout << "0" << minute;
} else {
cout << minute;
}
}
4.反思:
这道题在洛谷的入门题单中被标为“普及-”,相较于其他题,难得不是程序逻辑,而是细节处理,避开各种坑。