PTA基础习题——7-22 龟兔赛跑 (20分) 另解
原题目链接
题目不算难,网上大家大多都是用模拟的方法做的,例如
原文链接:https://blog.csdn.net/qq_40268826/article/details/82979128)
while(minute--){
turtle += 3;
if (run-- > 0)
rabbit += 9;
if (run == 0 ){ //兔子跑10分钟回头看一下,如果比乌龟快就休息30分钟,反之再跑10分钟
if (rabbit > turtle && rest != 0) //兔子清醒状态下,快才休息
rest = 30;
else
run = 10 ;
}
if (rest-- == 0) //休息结束继续跑10分钟
run = 10;
}
我觉得可以简单推到一下哈!
Time 10 30 40 50 60 80 90
Rabbit 90 90 90 180 180 180 270
tortoise 30 90 120 150 180 240 270
可以发现,每90分钟(270米)是一个轮回,兔子在(0,30),(45,60)分钟内领先,边界处取等号,其余时间乌龟领先。这样就可以对时间直接取模,不用while(minute–)啦(有可能minute很大)。兔子的比较麻烦,分段求,乌龟的比较简单一些。
下面是我的AC代码:
#include<stdio.h>
int main(){
int minute,temp,rabbit;
scanf("%d",&minute);
temp = minute / 90;
minute %= 90;
if(minute > 0 && minute < 30 || minute > 45 && minute < 60){
if(minute <= 10)
rabbit = minute * 9;
else if(minute < 30)
rabbit = 90;
else if(minute < 50)
rabbit = 90 + (minute - 40 )* 9;
else rabbit = 180;
printf("^_^ %d",temp * 270 + rabbit);
}
else if(minute == 0 || minute == 30 || minute == 45 || minute == 60)
printf("-_- %d",temp * 270 + minute * 3);
else
printf("@_@ %d",temp * 270 + minute * 3);
return 0;
}
欢迎大家和我交流啦!本人大一软件工程专业萌新一枚