方案一:因为时间可能不是10的整数倍,所以可以先直接算龟兔所跑的路程,在结尾处计算超出时间的路程,这样比较容易想。
#include<stdio.h>
int main(void)
{
int s1=0,s2=0;//s1乌龟,s2兔子
int t=0,T;
int wait=1;//wait是最后一次是乌龟跑了还是乌龟兔子都跑了
scanf("%d",&T);
while(t<T){
if(s1>s2){
s2+=3*30;
t+=30;
wait=1;
}else{
s1+=9*10;
s2+=3*10;
t+=10;
wait=0;
}
}
if(t>T){//这是判断最后一次有没有等
if(wait==1){//最后一次只有乌龟跑了
s2-=(t-T)*3;
}else{//最后一次都跑了
s1-=(t-T)*9;
s2-=(t-T)*3;
}
}
if(s1>s2)printf("^_^ %d",s1);
else if(s2>s1)printf("@_@ %d",s2);
else printf("-_- %d",s1);
return 0;
}
方案二:用rest表示状态,同时把兔子时间和外界时间分离,实现兔子休息。
#include<stdio.h>
int main(void)
{
int T;
int t=0;
int s1=0,s2=0;
int rtime=0;//兔子的时间
int rest=0;//兔子是否在休息的状态
scanf("%d",&T);
while(t!=T){
s2+=3;//乌龟跑
if(!rest){//如果兔子不在休息
s1+=9;//兔子跑
rtime++;//兔子时间+
}
t++;
if(t%10==0&&!rest){
if(s2>s1){//如果兔子在乌龟前面
rest=1;//休息
rtime+=30;//兔子时间+30
}
}
if(t==rtime){//时间赶上兔子时间
rest=0;//兔子退出休息
}
}
if(s1>s2) printf("^_^ %d",s1);
else if(s2>s1) printf("@_@ %d",s2);
else printf("-_- %d",s1);
return 0;
}