PTA基础习题——7-22 龟兔赛跑 (20分) 另解

PTA基础习题——7-22 龟兔赛跑 (20分) 另解

原题目链接
题目不算难,网上大家大多都是用模拟的方法做的,例如
原文链接:https://blog.csdn.net/qq_40268826/article/details/82979128

while(minute--){
        turtle += 3;
        if (run-- > 0)
            rabbit += 9;
        if (run == 0 ){            //兔子跑10分钟回头看一下,如果比乌龟快就休息30分钟,反之再跑10分钟
            if (rabbit > turtle && rest != 0)  //兔子清醒状态下,快才休息  
                rest = 30;
            else 
                run = 10 ;
        }
        if (rest-- == 0)                    //休息结束继续跑10分钟
            run = 10;
    }

我觉得可以简单推到一下哈!
Time 10 30 40 50 60 80 90
Rabbit 90 90 90 180 180 180 270
tortoise 30 90 120 150 180 240 270
可以发现,每90分钟(270米)是一个轮回,兔子在(0,30),(45,60)分钟内领先,边界处取等号,其余时间乌龟领先。这样就可以对时间直接取模,不用while(minute–)啦(有可能minute很大)。兔子的比较麻烦,分段求,乌龟的比较简单一些。
下面是我的AC代码:

#include<stdio.h>
int main(){
    int minute,temp,rabbit;
    scanf("%d",&minute);
    temp = minute / 90;
    minute %= 90;
    if(minute > 0 && minute < 30 || minute > 45 && minute < 60){
        if(minute <= 10)
            rabbit = minute * 9;
        else if(minute < 30)
            rabbit = 90;
        else if(minute < 50)
            rabbit = 90 + (minute - 40 )* 9;
        else    rabbit = 180;
        printf("^_^ %d",temp * 270 + rabbit);
    }
    else if(minute == 0 || minute == 30 || minute == 45 || minute == 60)
        printf("-_- %d",temp * 270 + minute * 3);   
    else    
        printf("@_@ %d",temp * 270 + minute * 3);
    return 0;
}

欢迎大家和我交流啦!本人大一软件工程专业萌新一枚

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值