题目链接: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))