乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

输入格式:

输入在一行中给出比赛时间T(分钟)。

输出格式:

在一行中输出比赛的结果:乌龟赢输出​​@_@​​​,兔子赢输出​​^_^​​​,平局则输出​​-_-​​;后跟1空格,再输出胜利者跑完的距离。

这是我用数学方法计算的


0

10

30

40

45

50

60

80

90

兔子

0

90

90

90

135

180

180

180

270

乌龟

0

90

90

120

135

150

180

240

270

7-24 龟兔赛跑_数学方法

#include<stdio.h>
int main()
{
int m = 1, n, t, k;
scanf("%d", &t);
m = 3 * t;
n = t % 90;
k = t / 90;
if ((n > 30 && n < 45) || (n > 60 && n < 90))
printf("@_@ %d\n", m);
else if(n==30||n==45||n==60||n==0)
printf("-_- %d\n", m);
else
{
if (n < 10)
printf("^_^ %d\n", 270 * k + 9 * n);
else if (n > 10 && n < 30)
printf("^_^ %d\n", 270 * k + 90);
else if (n > 45 && n < 50)
printf("^_^ %d\n", 270 * k + 90 * (n - 30));
else
printf("^_^ %d\n", 270 * k + 180);
}
return 0;
}

缺点就是特别繁琐

后来发现了这个

for(int time=1;time<=t;time++)//利用for循环从1开始比较
{
if(time%10==0&&s2>time*3)//兔子跑完十分钟并且超过乌龟
{
time +=30;//跳过三十分钟的跑步时间
}
s2 +=9;//每分钟跑9米
}
#include<stdio.h>
int main()
{
int t=0,rest=0;
int s1=0,s2=0;
scanf("%d",&t);
s1=3*t;
for(int time=1;time<=t;time++)
{
if(time%10==0&&s2>time*3)
{
time +=30;
}
s2 +=9;
}
if(s1>s2)
printf("@_@ %d",s1);
else if(s1==s2)
printf("-_- %d",s1);
else if(s1<s2)
printf("^_^ %d",s2);
return 0;
}

简化了好多,适用范围也广