2007年4月23日 星期一

Wagering

四、打賭遊戲
三個箱子中有一個放了巨額獎金,另兩個是空的。參賽者選擇一個箱子後,莊家打開一個空的箱子,問參賽者要不要改變選擇換到另一個箱子。此時參賽者有三種可能的策略:

1.維持原來之選擇
2. 換到另一個箱子
3. 隨機(random)決定要不要換

最後莊家公佈答案,決定勝負。請寫一程式完成這個遊戲,並統計猜中的機率。


提示:遊戲開始前必須輸入要玩的次數,並顯示三種策略之代號(參考Sample Output)。程式必先隨機決定巨額獎金放置之箱子,但尚不能公佈,參賽者此時決定其選擇之箱子,接著莊家打開一個空的箱子之後,詢問參賽者決定採用何種策略(參考Sample Output),此時顯示參賽者最後選擇之箱子,然後公佈答案及猜中與否。遊戲結束後公佈猜中之機率。

 
Sample Output
請輸入要玩之次數: 10
策略代號:
1. 維持原來之選擇
2. 換到另一個箱子
3. 隨機決定要不要換
***************************
請輸入所選擇之箱子號碼: 1
莊家打開2號箱
請輸入策略代號: 1
最後選擇1號箱
* 巨額獎金在3號箱
>> 失敗
***************************

請輸入所選擇之箱子號碼: 3
莊家打開1號箱
請輸入策略代號: 2
最後選擇2號箱
* 巨額獎金在3號箱
>> 失敗
***************************

請輸入所選擇之箱子號碼: 2
莊家打開3號箱
請輸入策略代號: 3
最後選擇2號箱
* 巨額獎金在2號箱
>> 成功
***************************




***************************

遊戲結束,成功率0.45 


困難度:*
時間複雜度:O(n)
程式語言:C++
預估時間:1 小時

解題原理:
1. 先取得使用者輸入玩的次數
2. 隨機產生巨額寶箱號碼
3. 莊家隨機打開非使用者且非巨額寶箱號碼
4. 處理策略代號,如果選擇換到另一個寶箱,演算法為 1+2+3 - 莊家打開寶箱號碼 - 使用者原先選擇寶箱號碼
5. 完成


程式下載


原碼下載


參考來源:中山大學八十九學年度電腦程式設計競賽 試題 四

沒有留言: