zoukankan      html  css  js  c++  java
  • 基础练习 龟兔赛跑预测

    问题描述
      话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先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 }
  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12710584.html
Copyright © 2011-2022 走看看