天天看點

c語言 龜兔賽跑

龜兔賽跑

問題描述

  話說這個世界上有各種各樣的兔子和烏龜,但是研究發現,所有的兔子和烏龜都有一個共同的特點——喜歡賽跑。于是世界上各個角落都不斷在發生着烏龜和兔子的比賽,小華對此很感興趣,于是決定研究不同兔子和烏龜的賽跑。他發現,兔子雖然跑比烏龜快,但它們有衆所周知的毛病——驕傲且懶惰,于是在與烏龜的比賽中,一旦任一秒結束後兔子發現自己領先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,明白相關變量的含義,比如:
			t--兔子領先米數,s--停下休息秒數,l--賽道長度,v1--兔子速度,v2--烏龜速度
			
	2,明白,當有一方 路程s1,s2 大于l 時,輸出結果
			
			判斷條件:
					while(s1<l && s2<l)
			輸出結果:
					if (s1>s2)      printf("R\n");
					else if (s2>s1) printf("T\n");
					else		   printf("D\n");
					
	3,每秒兔子和烏龜的路程數都會增加,同時秒數增加
					s1 += v1;
					s2 += v2;
					i++;
					
	4,當兔子的路程大于烏龜 t 米後,停下來休息
		if (s1 - s2 >= t)
		s1 -= v1*s;	// 核心:以烏龜的不變的速度為标準  減去休息時少跑的路程
		
	5,注意跳出while 的條件
			a,	while(s1<l && s2<l)
			b,	if (s1 == l || s2 == l)
				break;
				
	6,根據分析,寫出代碼
           

代碼展示(已驗證):

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) 
{
	int v1, v2, t, s, l, s1 = 0, s2 = 0, i = 0;	//相關變量已經在題目中定義
	scanf("%d %d %d %d %d", &v1, &v2, &t, &s, &l);
	
	while (s1<l && s2<l)
	{
		s1 += v1;
		s2 += v2;
		i++;
		if (s1 == l || s2 == l)
			break;
		if (s1 - s2 >= t)
			s1 -= v1*s;	// (記住烏龜的不變速度)  減去休息時少跑的路程
	}
	// 輸出結果
	if (s1>s2)      printf("R\n");
	else if (s2>s1) printf("T\n");
	else		   printf("D\n");
	
	printf("%d", i);	//輸出 秒數

	return 0;	
}
           

泡泡:

龜兔賽跑的動态變化的過程,想的太多,會很頭疼,用 while 拿捏整個賽跑過程,寫好跳出 while 的條件,
也就相當于有了一個正确的結束,當結束是正确的,那麼進行過程的代碼描述:
			
				路程的相加
				秒數相加
				是否等于賽道長度
				是否超過烏龜 t 米
當while 結束,就可以根據 s1,s2 的大小判斷,進行輸出了
           

ok ,收工。

繼續閱讀