乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
思路:
①乌龟和兔子的时间都是一样的,只不过乌龟没分每秒都在不停地跑,兔子在一定条件下偷偷休息去了,所以乌龟的路程我直接用了个累加 tur+=3;
②兔子可以休息的条件是什么:每跑10分钟它和乌龟跑的路程进行一个判断,它跑的路程大于乌龟的路程,并且前一分钟没有休息,就“奖励”30分钟休息时间。 if(time%10==0&&rest==0&&rabbit>tur) rest=30;
③注意,兔子一旦开始休息,就得休息30分钟不能跑,直到30分钟消耗完,此时我们可以用休息时间是否用完来作为是否接着跑或者接着休息的条件之一。如果休息时间用完了,并且乌龟跑的路程≥兔子的路程,兔子就得起来接着跑 if(rest==0) rabbit+=9;
以上三点进行循环即可。
(相关视频讲解已发布在B站:李桥桉)
#include<stdio.h>
int main()
{
int T,rabbit,tur,rest=0;
int time;
rabbit=tur=0;
scanf("%d",&T);
for(time=0;time<T;time++)
{
tur+=3; //乌龟非常努力,一直跑,不休息。而兔子的跑或休息都需要条件。
if(time%10==0&&rest==0&&rabbit>tur)
rest=30; //兔子每跑10分钟回头看一下乌龟,所以时间要满足10的倍数,若超过乌龟就在路边休息30分钟;
if(rest==0) //加个条件:兔子不在休息时间内就得跑;
rabbit+=9;
else
rest--; //给兔子休息时间30分钟的休息时间倒计时。
}
//判断龟兔的路程并输出结果
if(rabbit<tur)
printf("@_@ %d",tur);
else if(rabbit>tur)
printf("^_^ %d",rabbit);
else
printf("-_- %d",rabbit);
return 0;
}