守望者的逃離—貪心算法

問題描述
<span style="font-family:KaiTi_GB2312;"><span style="FONT-SIZE: 10.5pt">惡魔獵手尤迪安野心勃勃.他背叛了暗夜精靈,率深藏在海底的那加企圖叛變:守望者在與尤迪安的交鋒中遭遇了圍殺.被困在一個荒蕪的大島上。爲了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去,到那時,島上的所有人都會遇難:守望者的跑步速度,爲17m/s,以這樣的速度是無法逃離荒島的。慶幸的是守望者擁有閃爍法術,可在1s內移動60m,不過每次使用閃爍法術都會消耗魔法值10點。守望者的魔法值恢復的速度爲4點/s,只有處在原地休息狀態時才能恢復。</span><span style="FONT-SIZE: 10.5pt"></span></span>

現在已知守望者的魔法初值M,他所在的初始位置與島的出口之間的距離S,島沉沒的時間T。你的任務是寫一個程序幫助守望者計算如何在最短的時間內逃離荒島,若不能逃出,則輸出守望者在剩下的時間內能走的最遠距離。注意:守望者跑步、閃爍或休息活動均以秒(s)爲單位。且每次活動的持續時間爲整數秒。距離的單位爲米(m)。

實現以下接口:

void HelpWatcherEscape(unsigned int uiMagic, unsigned int uiDistance, unsigned int uiSec,
	char *pRstOut, unsigned int *puiMaxDistance)
功能:判斷守望者是否能夠逃出荒島

輸入參數:
unsigned int uiMagic:無符號整型,守望者的初始魔法值
unsigned int uiDistance:無符號整型,守望者所在的初始位置與島出口之間的距離。 
unsigned int uiSec:無符號整型,島沉沒需要的時間,單位爲秒
輸出參數(指針指向的內存區域保證有效):
char *pRstOut:輸出守望者能否逃出荒島,若能逃出輸出“Yes”,不能輸出“No”,注意大小寫。
unsigned int *puiMaxDistance:若守望者能逃出荒島,輸出逃出荒島所用的最短時間,
      不能逃出則輸出守望者能逃出的最大距離。
返回值:void


思路:
1、跑的人每秒都在跑
2、當閃爍的人發現能閃時就閃,並判斷此時誰快,如果閃的快,這時候跑的人要和閃爍的人站到一個起跑線上繼續跑
3、每秒都判斷是否已經逃離島

</pre><pre class="cpp" name="code">void HelpWatcherEscape(unsigned int uiMagic, unsigned int uiDistance, unsigned int uiSec,
	char *pRstOut, unsigned int *puiMaxDistance)

{
	int DistanceTotal ;
	int People_1_Dis = 0 ;
	int People_2_Dis = 0 ;
	int Sec = uiSec ;
	int Distance = uiDistance ;
	int Time = 1 ;
	int Magic = uiMagic ;
	char Can[4] = "Yes";
	char CanNot[3] = "No";
	while ( Time <= Sec )
	{
		People_1_Dis += 17 ;
		if ( Magic >= 10 )
		{
			People_2_Dis += 60 ;
			Magic -= 10 ;
		}
		else
		{
			Magic += 4 ;
		}
		if ( People_2_Dis > People_1_Dis )
		{
			People_1_Dis = People_2_Dis ;
			DistanceTotal = People_2_Dis ;
		}
		else
		{
			DistanceTotal = People_1_Dis ;
		}
		if ( DistanceTotal >= Distance )
		{
			*pRstOut = Can[0] ;

			*(pRstOut+1) = Can[1];

			*(pRstOut+2) = Can[2];

			*puiMaxDistance = Time ;

			return ;
		}
		Time++ ;
	}
	*pRstOut = CanNot[0] ;
	*(pRstOut+1) = CanNot[1];
	*puiMaxDistance = DistanceTotal ;
	return ;
}




發佈了34 篇原創文章 · 獲贊 18 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章