问题描述
话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。
然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。
然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度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
4
样例输入
10 5 5 1 20
样例输出
R
3
3
样例输入
10 5 5 3 20
样例输出
T
4
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 }