原题如下:
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
输入格式:
输入在一行中给出比赛时间T(分钟)。
输出格式:
在一行中输出比赛的结果:乌龟赢输出@_@
,兔子赢输出^_^
,平局则输出-_-
;后跟1空格,再输出胜利者跑完的距离。
输入样例:
242
输出样例:
@_@ 726
这道题在做的时候关键是要把兔子的跑步规律搞清楚,跑10min,休息30min,再跑10min,中间可能连续跑20min。在找乌龟和兔子之间的路程关系的时候会发现,每过90分钟,相当于重新起跑,因此他们之间的路程是以90*3为周期的,因此只需要找前90min内乌龟和兔子之间的路程关系即可。分析可知:
t = 0时,兔子 = 乌龟
0< t < 30时,兔子 > 乌龟
t = 30时,兔子 = 乌龟
30 < t < 45时,乌龟 > 兔子
t = 45时,兔子 = 乌龟
45 < t <= 50时,兔子 > 乌龟(k * 270 + temp * 9)
50 < t < 60时,兔子 > 乌龟(k * 270 + 180)
t = 60时,兔子 = 乌龟
60 < t < 90时,乌龟 > 兔子
(注意:提干中说需要输出赢家跑过的路程,但是当两个平局时谁是赢家呢?所以要不要输出呢?当时是要的,随便输出谁的路程都可以,这个比较坑,本来以为如果平局的话不用输出路程,因为根本不存在赢家啊……)
代码如下:
<pre name="code" class="cpp">#include <stdio.h>
int main()
{
int T, temp, k;
scanf("%d", &T);
temp = T % 90;//确定几个回合过去之后剩余多少分钟
k = T / 90;//确定过了几个回合,每90分钟重复一次
if (temp < 30 && temp > 0)
printf("^_^ %d\n", k * 270 + temp * 9);
else if (temp == 30)
printf("-_- %d\n", k * 270 + temp * 3);
else if (temp > 30 && temp < 45)
printf("@_@ %d\n", k * 270 + temp * 3);
else if (temp == 45)
printf("-_- %d\n", k * 270 + temp * 3);
else if (temp > 45 && temp <= 50)
printf("^_^ %d\n", k * 270 + 90 + (temp - 40) * 9);
else if (temp > 50 && temp < 60)
printf("^_^ %d\n", k * 270 + 180);
else if (temp == 60)
printf("-_- %d\n", k * 270 + temp * 3);
else if (temp > 60 && temp < 90)
printf("@_@ %d\n", k * 270 + temp * 3);
else
printf("-_- %d\n", k * 270 + temp * 3);
return 0;
}