PTA 翁恺 7-39 龟兔赛跑

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

输入格式:

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

输出格式:

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

输入样例:

242
 
结尾无空行
 

输出样例:

@_@ 726
 
结尾无空行
整体思路:
本题乌龟的路程很简单,计算兔子的路程关键就在怎么区分兔子跑步的时间。引入两个参数,run参数显示兔子状态,为1则在跑步,为0则在睡觉;参数sleeptime显示开始睡觉的时间。
当run = 1时,兔子路程计入;满足三个条件时开始睡觉:①时间为十的倍数;②兔子目前在跑步,也就是run = 1;③兔子路程大于乌龟路程。满足条件开始睡觉,记录睡觉时间,到时间后run改为1自动苏醒。
整体代码:
#include <stdio.h>

int main (void){
    int time = 0,run = 1,sleeptime = 0;
    scanf ("%d",&time);
    int gui = 0,rabbit = 0,i = 0;
    for (i = 1;i <= time;++i)
    {
        gui += 3;
        if (run == 1)
            rabbit += 9;
        if ((i % 10 == 0) && (rabbit > gui) && (run == 1))
        {
            run = 0;
            sleeptime = i;
        }
        if (i == sleeptime + 30)
        {
            run = 1;
        }
    }
    if (rabbit > gui)
        printf ("^_^ %d",rabbit);
    if (rabbit == gui)
        printf ("-_- %d",rabbit);
    if (rabbit < gui)
        printf ("@_@ %d",gui);
    return 0;
}

讨论:

  • 一开始没有睡觉条件不充分,后两个检测点一直过不了,后面才发现是“每十分钟检测一次”,比如兔子在10分钟时判定睡30分钟了,20分钟时又被判断进入睡眠30分钟,就导致结果出现异常。
posted @ 2021-10-19 23:49  海萌萌萌萌萌萌  阅读(192)  评论(0编辑  收藏  举报