PTA 翁恺 7-39 龟兔赛跑
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
输入格式:
输入在一行中给出比赛时间T(分钟)。
输出格式:
在一行中输出比赛的结果:乌龟赢输出@_@
,兔子赢输出^_^
,平局则输出-_-
;后跟1空格,再输出胜利者跑完的距离。
输入样例:
242
结尾无空行
输出样例:
@_@ 726
结尾无空行
整体思路:
本题乌龟的路程很简单,计算兔子的路程关键就在怎么区分兔子跑步的时间。引入两个参数,run参数显示兔子状态,为1则在跑步,为0则在睡觉;参数sleeptime显示开始睡觉的时间。
当run = 1时,兔子路程计入;满足三个条件时开始睡觉:①时间为十的倍数;②兔子目前在跑步,也就是run = 1;③兔子路程大于乌龟路程。满足条件开始睡觉,记录睡觉时间,到时间后run改为1自动苏醒。
整体代码:
#include <stdio.h> int main (void){ int time = 0,run = 1,sleeptime = 0; scanf ("%d",&time); int gui = 0,rabbit = 0,i = 0; for (i = 1;i <= time;++i) { gui += 3; if (run == 1) rabbit += 9; if ((i % 10 == 0) && (rabbit > gui) && (run == 1)) { run = 0; sleeptime = i; } if (i == sleeptime + 30) { run = 1; } } if (rabbit > gui) printf ("^_^ %d",rabbit); if (rabbit == gui) printf ("-_- %d",rabbit); if (rabbit < gui) printf ("@_@ %d",gui); return 0; }
讨论:
- 一开始没有睡觉条件不充分,后两个检测点一直过不了,后面才发现是“每十分钟检测一次”,比如兔子在10分钟时判定睡30分钟了,20分钟时又被判断进入睡眠30分钟,就导致结果出现异常。