5-22 龟兔赛跑 (20分)
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
输入格式:
输入在一行中给出比赛时间T(分钟)。
输出格式:
在一行中输出比赛的结果:乌龟赢输出@_@
,兔子赢输出^_^
,平局则输出-_-
;后跟1空格,再输出胜利者跑完的距离。
输入样例:
242
输出样例:
@_@ 726
//自己的办法,繁琐;老师的方法,较为简单易懂。
//争取大学四年后,能比老师在编程方面更强。
//自己:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int time;
int distance1=0,distance2=0;
scanf("%d",&time);
if(time<10){
distance1=9*time;
distance2=3*time;
}
else{
distance1=90;
distance2=30;
time=time-10;
while(time){
if(time/10){
if(distance1>distance2){
if(time/30){
distance2=distance2+30*3;
time=time-30;
if(time/10){
distance1=distance1+9*10;
distance2=distance2+3*10;
time=time-10;
}
else{
distance1=distance1+9*time;
distance2=distance2+3*time;
time=0;
}
}
else{
distance2=distance2+time*3;
time=0;
}
}
else{
distance1=distance1+9*10;
distance2=distance2+3*10;
time=time-10;
}
}
else{
if(distance1>distance2){
distance2=distance2+time*3;
time=0;
}
else{
distance1=distance1+time*9;
distance2=distance2+time*3;
time=0;
}
}
}
}
if(distance1>distance2){
printf("^_^ %d\n",distance1);
}
else if(distance2>distance1){
printf("@_@ %d\n",distance2);
}
else
printf("-_- %d\n",distance1);
return 0;
}
//老师:(每次老师遇到题目,均会先分析,从数据存储到算法思想,到当前问题规律,此题的一个规律要是能分析到,题目就容易了)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int rabbit=0,tor=0;
int run=1;//用一个变量代表兔子在不在跑
int T,t=10;
scanf("%d",&T);
while(t<=T){
tor=3*t;
rabbit=rabbit+run*90;
if(rabbit>tor){//由规律可推得,在时间为40的周期内, 兔子和乌龟的相对状态,只有兔子比乌龟快,和两者相同。
run=0;
t+=20;
}
else
run=1;
t=t+10;
}
tor=3*T;
if(run)
rabbit=rabbit+(10-(t-T))*9;
if(rabbit>tor)
printf("^_^ %d\n",rabbit);
else if(tor>rabbit)
printf("@_@ %d\n",tor);
else
printf("-_- %d\n",rabbit);
return 0;
}
/*#include <stdio.h>
int main(){
int t, tdis, rdis, run, i;
scanf("%d",&t);
run = 1;
rdis = tdis = 0;
for(i=10; i<=t; i+=10){
tdis = i * 3;
rdis = rdis + run * 90;
if(rdis>tdis){
run = 0;
i += 20;
}else{
run = 1;
}
}
tdis = t*3;
rdis = rdis + run*(t-i+10)*9;
if(tdis>rdis) printf("@_@ %d\n",tdis);
else if(tdis<rdis) printf("^_^ %d\n",rdis);
else printf("-_- %d\n",tdis);
return 0;
}
*/