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

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

原题目链接
题目不算难,网上大家大多都是用模拟的方法做的,例如
原文链接:https://blog.youkuaiyun.com/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;
}

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

### 龟兔赛跑 PTA Python 编程法 为了计算T钟后乌龟和兔子的位置并判断谁领先,可以通过模拟两者的行为来决这个问。下面提供了一个Python函数`who_is_faster_after_T_minutes(T)`用于此目的。 该算法考虑到了兔子每十钟会停下来查看一次乌龟的情况,并且如果超过了乌龟就会休息三十钟这一特性[^1]。 ```python def who_is_faster_after_T_minutes(T): rabbit_speed_per_minute = 9 # 兔子速度(米/) turtle_speed_per_minute = 3 # 乌龟速度(米/) rabbit_distance = 0 # 初始距离均为零 turtle_distance = 0 minutes_passed = 0 # 记录已经过去的总时间(单位:) while minutes_passed < T: if (minutes_passed % 40 >= 10 and minutes_passed % 40 != 0): # 当处于第11到第40钟之间时,兔子正在睡觉 pass elif ((minutes_passed + 1) % 10 == 0 or minutes_passed == 0): # 如果正好是整十数或者是刚开始,则让兔子前进 rabbit_distance += rabbit_speed_per_minute * min((T-minutes_passed), 10) # 不论如何,乌龟能够持续移动 turtle_distance += turtle_speed_per_minute minutes_passed += 1 result = "After {} minute(s):\n".format(T) if rabbit_distance > turtle_distance: result += "Rabbit is faster with distance of {:.2f} meters.".format(rabbit_distance) else: result += "Turtle is faster with distance of {:.2f} meters.".format(turtle_distance) return result print(who_is_faster_after_T_minutes(60)) ``` 上述代码定义了一个名为 `who_is_faster_after_T_minutes()` 的函数接收参数 T 表示经过的时间长度(以钟计),并通过循环迭代更新两个变量别记录下此时此刻两只动物所走过的路程。最后比较两者的行程得出结论返回给调用者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值