```C++
#include <bits/stdc++.h>
using namespace std;
int main() {
int s , v , t , HH , MM , hh;
cin >> s >> v;
t = ceil(s/v)+10;//得到所需最短时间(单位:分钟)
if(t>59){
hh=floor(t/60); MM=t-floor(t/60)*60;//将用时拆分为小时和分钟
if(hh>8){//根据所需时间,按提前一天出发和当天出发分类
HH=32-hh;
}
else{
HH=hh;
}
}
if(t<=59){HH=7; MM=59-t;}//将用时拆分为小时和分钟
if(HH<12){cout << "0" << HH << ":" << MM;}//控制输出格式
else cout << HH << ":" << MM;
return 0;
}
```
这是按我的理解分析的代码。
下面给出逻辑有误的部分
## A
第8行,t的赋值
因为s和v是整数类型,所以它们之间的除法是整除运算,比如5/3=1。也正是因为整数类型之间的除法是整除运算,所以不必使用floor函数。
处理方案:要么将s或者v改成double实数类型,要么把s/v改成1.0*s/v,因为1.0是实数,与s和v的数据类型不同,所以后面的运算会自动进行类型转换,得到一个实数值。
## B
第9行到第17行之间
推测是想将用时转换为最晚时间。但是只对小时进行了转换(另外第15行存在逻辑错误,不应该将hh直接赋值给HH),而对分钟却不闻不问。
## C
第18行
MM=60-t。
## D
第20行和第21行
没有考虑到所有情况,输出格式有误。
## 参考数据(更多数据可以自己造)
样例输入和输出
```
10 1
07:40
```
```
50 1
07:00
```
```
60 1
06:50
```
```
470 1
00:00
```
by Ishr_Mla @ 2023-02-07 01:14:19