PaiDaDa @ 2024-07-14 10:30:29
#include<stdio.h>
#include<math.h>
int main(){
int s,v,t,HH=0,MM=0;
scanf("%d %d",&s,&v);
t=ceil(s/v)+10;
while(t>60){
HH+=1;
t-=60;
}
MM=t;
if(MM!=0){
HH+=1;
MM=59-MM;
}
if(HH>8){
printf("%02d:%02d",32-HH,MM);
}
else {
printf("%02d:%02d",8-HH,MM); }
return 0;
} ```
by blsya23a2 @ 2024-07-14 10:46:15
@PaiDaDa
当 if
。
by PaiDaDa @ 2024-07-14 19:24:30
@blsya23a2
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 blsya23a2 @ 2024-07-14 21:12:35
不知道。我主要写 python。
by originalsage @ 2024-07-14 22:33:27
你这个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 PaiDaDa @ 2024-07-15 11:29:11
@originalsage
感谢大佬帮忙!!!!想明白了
by PaiDaDa @ 2024-07-15 11:33:20
@PaiDaDa
问题:当s,v都是int类型是s/v就已经是向下取整了。因此ceil()函数发挥不了作用。
大佬给出的解决方案:将s,v类型改成double,并且将59-t改成60-t
结果是:修改成功