Loading... # 题目 # 【深基2.例12】上学迟到 ## 题目描述 学校和 yyy 的家之间的距离为 ss**s** 米,而 yyy 以 vv**v** 米每分钟的速度匀速走向学校。 在上学的路上,yyy 还要额外花费 1010**1**0 分钟的时间进行垃圾分类。 学校要求必须在上午 \\textrm{8:00} 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。 由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。 ## 输入格式 一行两个正整数 s,vs,v**s**,**v**,分别代表路程和速度。 ## 输出格式 输出一个 2424**2**4 小时制下的时间,代表 yyy 最晚的出发时间。 输出格式为 \\texttt{HH:MM},分别代表该时间的时和分。必须输出两位,不足前面补 00**0**。 ## 样例 #1 ### 样例输入 #1 ```Bash 100 99 ``` ### 样例输出 #1 ```Bash 07:48 ``` ## 提示 对于 100%100\\%**1**0**0**% 的数据,1≤s,v≤1041 \\le s,v \\le 10^4**1**≤**s**,**v**≤**1**0**4******。 # 题解 这是一个关于计算时间的问题,我们可以通过以下步骤来解决: 1. 首先,我们需要计算 yyy 走到学校所需的时间,这可以通过路程 s 除以速度 v 来得到,结果以分钟为单位。 2. 然后,我们需要将这个时间加上 yyy 进行垃圾分类所需的 10 分钟。 3. 最后,我们需要从 8:00 减去上述得到的总时间,得到的结果就是 yyy 最晚出发的时间。 以下是用 C++ 实现的代码: ```C++ #include <iostream> #include <iomanip> using namespace std; int main() { int s, v; cin >> s >> v; int t = s / v; if (s % v != 0) { t++; } t += 10; int h = 8 - t / 60; int m = 0 - t % 60; if (m < 0) { h--; m += 60; } if (h < 0) { h += 24; } cout << setw(2) << setfill('0') << h << ":"; cout << setw(2) << setfill('0') << m << endl; return 0; } ``` 这段代码首先读取路程和速度的值,然后计算出走路所需的时间,并加上垃圾分类所需的时间。然后从8:00开始减去这个总时间,得到 yyy 最晚出发的时间。最后,使用 `setw` 和 `setfill` 函数来确保输出的小时和分钟都是两位数。如果计算出的小时数小于0,那么就加上24,表示 yyy 需要在前一天出发。最后,输出 yyy 最晚出发的时间。注意,这段代码假设 yyy 每分钟至少能走一米。如果不能保证这一点,那么在计算走路所需时间时就需要向上取整。这可以通过在除法结果上加1来实现,但是如果 s 可以被 v 整除,则不需要加1。因此,我们使用了一个条件判断语句来处理这种情况。如果 s 不能被 v 整除,则走路所需的时间就加1分钟。否则,走路所需的时间就不变。这样就可以确保 yyy 能够准时到达学校。 最后修改:2023 年 10 月 18 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏