新手C语言求助!貌似是有逻辑漏洞

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

moyunruhua @ 2024-05-10 19:52:28

#include<stdio.h>
#include<math.h>

int main()
{ 
    int s,v,h,m;
    int t,sum;
    scanf("%d %d",&s,&v);

    t=s/v+1;//取整数部分 然后统一加一 

    if(t+10<=480)//是否在第一天 
    {
        sum=480-t-10;
        h=sum/60;
        m=sum%60;
        if(m>=10)
        {
            printf("0%d:%d",h,m);
        }
        else
        {
            printf("0%d:0%d",h,m);
        }
    }
    else if(t+10>480)
    {
        sum=1920-t-10;
        h=sum/60;
        m=sum%60;
        if(m>=11)
        {
            printf("%d:%d",h,m);
        }
        else
        {
            printf("%d:0%d",h,m);
        }
    }
}

只有第九个WA 不知道是哪里没想到。


by moyunruhua @ 2024-05-10 19:56:20

@moyunruhua h是小时位 m是分钟位 sum根据所在天不同 分别用 480分钟(八小时)减和1920分钟(24+8小时)减


by LHM_zs @ 2024-05-10 20:00:01

#include<stdio.h>
int s,v,t;
int main(){
    scanf("%d %d",&s,&v);
    int sum=(24+8)*60;
    if(s%v!=0)t=s/v+1+10;
    else t=s/v+10;
    int ans=sum-t;
    if(t<8*60)ans-=24*60;
    int h=ans/60;
    int m=ans%60;
    if(h<10)printf("0%d:",h);
    else printf("%d:",h); 
    if(m<10)printf("0%d",m);
    else printf("%d",m);

    return 0;
}

貌似是判断天数的地方错了


by LHM_zs @ 2024-05-10 20:00:37

@moyunruhua


by 2023TYK @ 2024-05-10 20:25:46

@moyunruhua t=s/v+1 需要特判,第9点才会对,代码参考楼上。


by moyunruhua @ 2024-05-10 21:51:43

@LHM_zs 感谢同学,确实是在

if(s%v!=0)t=s/v+1+10;
    else t=s/v+10;

部分出了问题。是我在看题解的时候理解错了,我以为能被整除的时候也要提前一分钟避免卡点来。 非常感谢你的解答!


by moyunruhua @ 2024-05-10 21:52:19

@2023TYK 感谢同学,确实是在

if(s%v!=0)t=s/v+1+10;
    else t=s/v+10;

部分需要特判。是我在看题解的时候理解错了,我以为能被整除的时候也要提前一分钟避免卡点来。 非常感谢你的解答!


|