90分答案请求指正!

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

Pisces007 @ 2023-10-24 15:44:05

#include<stdio.h>
#include<math.h>
int main()
{
    int s,v,h,h0,min; //路程,速度,显示小时数,减去小时数,显示分钟数
    int t; //总用时
    scanf("%d%d",&s,&v); //输入路程和速度
    t=ceil(10+s/v);  //向上取整函数ceil()
    min=60-t%60-1; 
    h0=(t-t%60)/60;
    if(h0<8)
        h=8-h0-1;
    else
        h=24+(8-h0-1);
    printf("%02d:%02d",h,min);
    return 0;
}

by xyhuuz @ 2023-10-24 23:01:15

也不知道是我不会用ceil函数还是咋的,我之前用这玩意也有问题,,,

t=(s%v==0)?s/v+10:s/v+11;  
min=60-t%60; 

把那两行改成这个来判断取整,应该就可以了。我现在一直弃用ceil改用这种三目运算符。

然后,你的代码还会有问题 比如,当你输入470 1的时候,正确答案00:00,而输出却是23:60

所以你的程序后面要加这几行

if(min==60){
    h++;
    min=0;
}
if(h==24) h=0;

讲到这我就不得不说测试点其实是有漏洞的! 比如,我写的程序在输入470 1的时候,会输出00:60,但我还是AC了,,所以我又提交了一遍,加了一行,以防日后hack

if(min==60) min=0;

by L1739424615 @ 2023-10-26 16:36:55

@xyhuuz ceil()用于浮点数而这个是int,


by xyhuuz @ 2023-10-26 18:45:27

@L1739424615 受教,感谢


|