C++20分,错在哪,麻烦大佬们看一眼

P5707 【深基2.例12】上学迟到

```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


|