• 基础练习 龟兔赛跑预测


    问题描述
      话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。
      然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。
    输入格式
      输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2<=100;t<=300;s<=10;l<=10000且为v1,v2的公倍数)
    输出格式
      输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。
      第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。
    样例输入
    10 5 5 2 20
    样例输出
    D
    4
    样例输入
    10 5 5 1 20
    样例输出
    R
    3
    样例输入
    10 5 5 3 20
    样例输出
    T
    4
    思路:做这个题首先分析明白兔子和乌龟的各个段状态:为了方便,我们先把兔子和乌龟跑一秒的距离作为两者跑步距离的初值,这样以后我们就只分析谁领先就好了。
               乌龟:一直在跑,直到其中一人到达终点结束,所以我们就用乌龟跑的时间作为比赛结束时间即可。
               兔子:1.兔子领先距离大于乌龟,停下休息,乌龟在跑,所以可以用一个 if (cntRaDistance - cntToDistance >= leadDistance) 判断后进入一个for循环: for (int i = 1; i <= restTime; i++) ,这个for循环就是兔子休息的时间,兔子停止,乌龟在跑,这期间还要注意乌龟可能会在兔子休息中到达终点获胜,所以我们用一个 flag 
                          2.反之,兔子和乌龟都跑。
    Code:
     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int tortoiseV, rabbitV;
     8     int leadDistance, restTime;
     9     int allDistance;
    10     int cntRaDistance = 0,cntRaTime = 0;
    11     int cntToDistance = 0, cntToTime = 1;
    12     int flag = 0;
    13 
    14     cin >> rabbitV >> tortoiseV >> leadDistance >> restTime >> allDistance;
    15     cntToDistance += tortoiseV; //初值
    16     cntRaDistance += rabbitV; //初值
    17     while(1)
    18     {
    19         //cntToTime++;
    20         //cntToDistance += tortoiseV;
    21         if (cntRaDistance - cntToDistance >= leadDistance)  //如果兔子的领先距离大于等于leadDistance,兔子开始休息
    22         {
    23             for (int i = 1; i <= restTime; i++)//休息时间乌龟跑,兔子不跑
    24             {
    25                 cntToDistance += tortoiseV;  //乌龟跑
    26                 cntToTime++;
    27                 if (cntToDistance == allDistance) //兔子休息中乌龟获胜
    28                 {
    29                     flag = 1;
    30                     break;
    31                 }
    32             }
    33         }
    34         else //两者都跑
    35         {
    36             cntToTime++;
    37             cntToDistance += tortoiseV;
    38             cntRaDistance += rabbitV;
    39         }
    40 
    41         if (cntToDistance == allDistance && cntRaDistance != allDistance || flag == 1)  //乌龟获胜
    42         {
    43             cout << 'T' << endl;
    44             cout << cntToTime;
    45             break;
    46         }
    47         else if (cntRaDistance == allDistance && cntToDistance != allDistance)
    48         {
    49             cout << 'R' << endl;
    50             cout << cntToTime;
    51             break;
    52         }
    53         else if (cntRaDistance == allDistance && cntToDistance == allDistance)
    54         {
    55             cout << 'D' << endl;
    56             cout << cntToTime;
    57             break;
    58         }
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    利用数组创建的顺序表实现各种功能
    poj3181 Dollar Dayz
    【网络协议】TCP的流量控制机制
    6.6.1 F# 中函数调用的类型判断
    oracle ORA-06550
    为基于 x86 的 Android* 游戏选择合适的引擎
    linux下apache https 虚拟主机配置
    Hibernate学习笔记(六) — Hibernate的二级缓存
    08_Android中的SimpleAdapter的使用
    【从零学习openCV】IOS7人脸识别实战
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12710584.html
Copyright © 2020-2023  润新知