基础练习 龟兔赛跑预测

问题描述
  话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先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 }
原文地址:https://www.cnblogs.com/ZhengLijie/p/12710584.html