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

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

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

\frac{s}{v}=470 时输出错误。建议加一个 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
结果是:修改成功


|