龜兔賽跑預測
資源限制
時間限制:1.0s 內存限制:512.0MB
問題描述
話說這個世界上有各種各樣的兔子和烏龜,但是研究發現,所有的兔子和烏龜都有一個共同的特點——喜歡賽跑。於是世界上各個角落都不斷在發生着烏龜和兔子的比賽,小華對此很感興趣,於是決定研究不同兔子和烏龜的賽跑。他發現,兔子雖然跑比烏龜快,但它們有衆所周知的毛病——驕傲且懶惰,於是在與烏龜的比賽中,一旦任一秒結束後兔子發現自己領先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
思路:
因爲烏龜的速度恆定所以Ttime(烏龜用的時間)=l/v2。當兔子耗費時間大於Ttime就是烏龜勝,小於就是兔子勝,等於就是平手。
怎樣記錄兔子時間:
因爲兔子每超過烏龜距離t就是休息s秒。所以要用if條件語句判斷。設兔子時間是Rtime,兔子跑過的距離爲R了。如果 Rl-Rtime* v2 >=t 時,就代表兔子超過烏龜距離t,Rtime+s。否則就是讓 Rl+v1*1(兔子跑的距離增加),同時時間增加。
完整代碼:
#include<iostream>
using namespace std;
int main()
{
int v1,v2,t,s,l;
cin>>v1>>v2>>t>>s>>l;
int Ttime=l/v2; //烏龜時間
int Rl=0; //兔子跑的距離
int Rtime=0; //兔子時間
while(Rtime<=Ttime&&Rl<l)
{
if(Rl-v2*Rtime>=t) //如果兔子領先烏龜距離t就停下s秒
{
Rtime+=s;
}
else //否則兔子距離+v1*1的距離,同時所用時間+1
{
Rl+=v1*1;
Rtime++;
}
}
if(Rtime<Ttime)
{
cout<<"R"<<endl;
cout<<Rtime<<endl;
}
else if(Rtime>Ttime)
{
cout<<"T"<<endl;
cout<<Ttime<<endl;
}
else
{
cout<<"D"<<endl;
cout<<Ttime<<endl;
}
return 0;
}