```c
#include<stdio.h>
#include<math.h>
int main()
{
int time,s,c,v,m,H,M;
int t;
scanf("%d%d", &s, &v);
t = s / v;
if (s % v) {
t++;
}
time = t;
if (time <= 470)
{
m = 470 - time;
}
else
{
m = 1910 - time;
}
M = m % 60;
H = (m - M) / 60;
if(H<10)
{
if(M<10)
{
printf("0%d:0%d", H, M);
}
else
{
printf("0%d:%d", H, M);
}
}
else
{
if (M < 10)
{
printf("%d:0%d", H, M);
}
else
{
printf("%d:%d", H, M);
}
}
}
```
by Cload_Honor @ 2023-09-21 22:29:41
@[yoiuqiou](/user/1104708) 调好了
by Cload_Honor @ 2023-09-21 22:38:24
谢谢大佬@[C_handsome](/user/827220)
还有一个问题就是:
t = round(t + 0.5);time = t;和if (s % v) {t++;}都是实现向上取整,但是为什么前者在题目中第九个监测点wa,而后者则可以完美通过呢?
by yoiuqiou @ 2023-09-22 07:15:54
@[yoiuqiou](/user/1104708) 这个我也不知道,用ceil的话就只有#9对了
by Cload_Honor @ 2023-09-22 20:20:49
@[yoiuqiou](/user/1104708) 主要我是学c++的,c就学过一点,所以蒟蒻帮不了太大的忙
by Cload_Honor @ 2023-09-22 20:32:39
@[yoiuqiou](/user/1104708) 似乎是精度问题
by Cload_Honor @ 2023-09-22 20:34:16
@[yoiuqiou](/user/1104708) 对了这个输出可以这样
```c
if (H < 10) {
printf("0");
}
printf("%d", H);
printf(":");
if (M < 10) {
printf("0");
}
printf("%d", M);
```
by Cload_Honor @ 2023-09-22 20:42:01
@[C_handsome](/user/827220)
谢谢大佬,已经帮我很多啦。
后面的输出也是,太巧妙了!我根本没想到。
还有就是关于t=round(t+0.5);time=t;的问题。确实存在精度问题,尤其是当t非常大或者非常小的时候,超过了double的精度的就会出问题。比如round(0.5+10^-100)就会输出0而不是理论上的1。
并且还有就是t= round(t+0.5); 会涉及到浮点数的运算,效率比较低。如果是if (s % v) {t++;}的话就既不会出现精度问题,也只涉及整型计算,效率更高。
by yoiuqiou @ 2023-09-23 10:17:08