[PTA]7-22 龟兔赛跑

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PTA]7-22 龟兔赛跑相关的知识,希望对你有一定的参考价值。

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

输入格式:

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

输出格式:

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

输入样例:

242

输出样例:

@_@ 726
  • 思路:
时间兔子乌龟
109030
309090
4090120
45135135
50180150
60180180
80180240
90270270

通过观察时间-路程表不能得出如下结论:
在(0,30)和(45,60)时间段内,兔子胜;
在边界处即0,30,45,60时刻时兔子和乌龟平局;
其余时刻乌龟胜;
且90分钟为一个轮回,即距离乌龟和兔子都跑完270米后进入下一个轮回。

  • 提交结果:

在这里插入图片描述

  • 源码:
#include<stdio.h>
int main()
{
    int T, turnaround;      // 时间T;轮回次数
    int dis_T, dis_R;       // 乌龟、兔子跑过的距离

    scanf("%d", &T);

    turnaround = T / 90;
    T %= 90;

    /* (0,30)或(45,60)时间段内兔子胜 */
    if (T > 0 && T < 30 || T > 45 && T < 60)
    {
        if (T <= 10)
        {
            dis_R = T * 9;
        }
        else if (T < 30)
        {
            dis_R = 90;
        }
        else if (T < 50)
        {
            dis_R = 90 + (T - 40) * 9;
        }
        else
        {
            dis_R = 180;
        }

        /* 兔子跑过的总距离 */
        dis_R += turnaround * 270;

        printf("^_^ %d\\n", dis_R);
    }
    else if (T == 0 || T == 30 || T == 45 || T == 60)       // 平局
    {
        dis_T = T * 3;
        dis_T += turnaround * 270;

        printf("-_- %d\\n", dis_T);
    }
    else                                                   // 乌龟胜
    {
        dis_T = T * 3;
        dis_T += turnaround * 270;

        printf("@_@ %d\\n", dis_T);
    }

    return 0;
}

以上是关于[PTA]7-22 龟兔赛跑的主要内容,如果未能解决你的问题,请参考以下文章

7-22 龟兔赛跑(20 分)

7-22 龟兔赛跑 (20 分)

PTA-7-22 堆栈模拟队列

PTA 程序设计天梯赛(101~120题)

PTA乙级 (1049 数列的片段和 (20分))

团体程序设计天梯赛-练习集(DFS,7-37 整数分解为若干项之和)