乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进 3 米,兔子每分钟前进 9 米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑 10 分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息 30 分钟,否则继续跑 10 分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问 T 分钟后乌龟和兔子谁跑得快?
输入格式:
输入在一行中给出比赛时间 T(分钟)。
输出格式:
在一行中输出比赛的结果:乌龟赢输出 @_@,兔子赢输出 ^_^,平局则输出 -_-;后跟 1 空格,再输出胜利者跑完的距离。
输入样例:
242
输出样例:
@_@ 726
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/14/exam/problems/802
提交:
题解:
时间 | 兔子 | 乌龟 |
---|---|---|
10 | 90 | 30 |
30 | 90 | 90 |
40 | 90 | 120 |
45 | 135 | 135 |
50 | 180 | 150 |
60 | 180 | 180 |
80 | 180 | 240 |
90 | 270 | 270 |
观察时间 - 路程表得出如下结论:
- 兔子胜:在 (0,30) 和 (45,60) 时间段内,兔子胜;
- 平局:在边界处即 0, 30, 45, 60 时刻时兔子和乌龟平局;
- 乌龟胜:其余时刻乌龟胜;
- 90 分钟为一个轮回,即当乌龟和兔子都跑完 270 米后进入下一个轮回。
#include<stdio.h>
int main() {
int T;
scanf("%d", &T);
// 90 分钟,270 米一个轮回
int turnarounds = T / 90;
T %= 90;
if (T > 0 && T < 30 || T > 45 && T < 60) {
int distanceRabbit;
// 兔子胜
if (T <= 10) {
distanceRabbit = T * 9;
} else if (T < 30) {
distanceRabbit = 90;
} else if (T < 50) {
distanceRabbit = 90 + (T - 40) * 9;
} else {
distanceRabbit = 180;
}
distanceRabbit += turnarounds * 270;
printf("^_^ %d\n", distanceRabbit);
} else if (T == 0 || T == 30 || T == 45 || T == 60) {
// 平局
int distanceTortoise = T * 3;
distanceTortoise += turnarounds * 270;
printf("-_- %d\n", distanceTortoise);
} else {
// 乌龟胜
int distanceTortoise = T * 3;
distanceTortoise += turnarounds * 270;
printf("@_@ %d\n", distanceTortoise);
}
return 0;
}