7-22 龟兔赛跑 (20分) Python

题目链接:https://pintia.cn/problem-sets/14/problems/802

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

输入格式:
输入在一行中给出比赛时间T(分钟)。

输出格式:
在一行中输出比赛的结果:乌龟赢输出@_@,兔子赢输出^_^,平局则输出-_-;后跟1空格,再输出胜利者跑完的距离。

输入样例:

242

输出样例:

@_@ 726

解题思路:

本题中的乌龟一直跑,比较容易计算,比较难的是兔子,那我们循环细化到每一分钟。
本题主要一个难点我认为其实就是兔子中途休息三十分钟,这个“休息”应该如何实现,我起初尝试了设置flag判断兔子的状态,这个方法,可行,但是相对复杂,因为还要获取兔子开始休息的时间,然后计算结束休息的时间,到达结束时间时,再把兔子的状态改为跑步。相对比较麻烦。
兔子休息30分钟,换一种思路就是乌龟比兔子多跑了30分钟,也就是兔子原地不动,给乌龟的距离加上90米,时间加上30分钟,如此去实现兔子“休息”30分钟。注意,此处还应加一个判断,判断距离输入的时间是否超过30分钟,超过30分钟直接加就行,如果不足30分钟,则需要根据剩余的时间做一下计算。

AC代码:

n = int(input())	#从控制台读取时间
wg, tz = 0, 0	#定义乌龟wg和兔子tz的初始运动距离为0
i = 1
while i <= n:	#注意,此处不能用for i in range()
    wg += 3		#因为range是对区间的数字一个一个遍历,无法起到修改时间的效果
    tz += 9
    if i % 10 == 0 and tz > wg:	#跑了10分钟并且兔子超过了乌龟
        if n - i >= 30:	#距离比赛剩余时间是否超过30分钟
            i += 30
            wg += 90
        else:
            wg += ((n - i) * 3)
            i = n
    i += 1
if wg > tz:		#判断谁赢了
    print('@_@ {}'.format(wg))
elif tz > wg:
    print('^_^ {}'.format(tz))
else:
    print('-_- {}'.format(wg))

猜你喜欢

转载自blog.csdn.net/weixin_44289959/article/details/109787948
今日推荐