乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进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 |
#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;
}
简化了好多,适用范围也广