有没有大佬可以帮我看看这个代码,第九个测试的不能通过,感谢!!!!

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

@[PaiDaDa](/user/1290989) 当 $\frac{s}{v}=470$ 时输出错误。建议加一个 `if`。
by blsya23a2 @ 2024-07-14 10:46:15


@[blsya23a2](/user/1005781) ```c if(HH>8){ printf("%02d:%02d",32-HH,MM); } else if(HH<8){ printf("%02d:%02d",8-HH,MM); } else if(HH==8){ printf("00:00"); } ``` 你好,请问你说的加if是这个吗?这个我试过了,这种情况下第7和9测试点会报错。请大佬再说明一次,拜托了!
by PaiDaDa @ 2024-07-14 19:24:30


不知道。我主要写 python。
by blsya23a2 @ 2024-07-14 21:12:35


你这个s和v用的是int 导致s/v结果已经向下取整了,导致如果s和v整除 比如s=1,v=1,导致59-MM那行的结果是48,结果就是错的, 有很多种修改方式,最简单的一种是把s和v改为double并且将59-MM改为60-MM; ``` #include<stdio.h> #include<math.h> int main(){ double s,v; int t,HH=0,MM=0; scanf("%lf %lf",&s,&v); t=ceil(s/v)+10; while(t>60){ HH+=1; t-=60; } MM=t; if(MM!=0){ HH+=1; MM=60-MM; } if(HH>8){ printf("%02d:%02d",32-HH,MM); } else { printf("%02d:%02d",8-HH,MM); } return 0; } ```
by originalsage @ 2024-07-14 22:33:27


@[originalsage](/user/1383861) 感谢大佬帮忙!!!!想明白了
by PaiDaDa @ 2024-07-15 11:29:11


@[PaiDaDa](/user/1290989) 问题:当s,v都是int类型是s/v就已经是向下取整了。因此ceil()函数发挥不了作用。 大佬给出的解决方案:将s,v类型改成double,并且将59-t改成60-t 结果是:修改成功
by PaiDaDa @ 2024-07-15 11:33:20


|