龟兔赛跑
龟兔赛跑
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
输入格式:
输入在一行中给出比赛时间T(分钟)。
输出格式:
在一行中输出比赛的结果:乌龟赢输出@_@
,兔子赢输出^_^
,平局则输出-_-
;后跟1空格,再输出胜利者跑完的距离。
输入样例:
242
输出样例:@_@ 726
1)实验代码
#include<stdio.h>
int main()
{
int T,i;
int rabbitT=0; //兔子跑的时间
scanf("%d",&T);
if(T<10) //时间小于10分钟,兔子赢
{
printf("^_^ %d\n",T*9);
return 0;
}
rabbitT=10;
for(i=10;i<=T;i++) //从第10分钟开始
{
if(i%10==0) //每10分钟回头,比较
{
if(rabbitT*9>i*3 && T-i>=30) //兔子跑的距离大于乌龟 ,剩余时间不小于30分钟
{
i=i+29; //不是i=i+30,因为for循环中还有个i++
}
if(rabbitT*9>i*3 && T-i<30) // 兔子跑的距离大于乌龟 ,剩余时间小于30分钟
{
i=T;
break;
}
if(rabbitT*9<=i*3 && T-i>=10) //兔子跑的距离小于乌龟,剩余时间不小于10分钟,兔子真正跑的时间+10
{
rabbitT=rabbitT+10;
i=i+9;
}
if(rabbitT*9<=i*3 && T-i<10) //兔子跑的距离小于乌龟,剩余时间小于10分钟,兔子真正跑的时间+T-i
{
rabbitT=rabbitT+(T-i);
i=T;
break;
}
}
}
if(rabbitT*9>i*3)
printf("^_^ %d\n",rabbitT*9);
if(rabbitT*9<i*3)
printf("@_@ %d\n",i*3);
if(rabbitT*9==i*3)
printf("-_- %d\n",i*3);
return 0;
}
2)设计思路
1.定义变量
2.时间小于10分钟,兔子赢
3.for循环,兔子跑的时间从第10分钟开始
4.每10分钟回头,比较
5.兔子跑的距离大于乌龟 ,剩余时间不小于30分钟,i=i+29
6.兔子跑的距离大于乌龟 ,剩余时间小于30分钟,i=T,跳出循环
7.兔子跑的距离小于乌龟 ,剩余时间不小于10分钟,兔子真正跑的时间+10,i=i+9
8.兔子跑的距离小于乌龟 ,剩余时间小于10分钟,兔子真正跑的时间+T-i,i=T,跳出循环
9.最后比较兔子和乌龟跑的距离,输出答案
3)本题调试过程碰到问题及解决办法
逻辑有点不清,漏了条件