假設你在進行乙個遊戲節目。現有三扇門供你選擇:一扇門後面是一輛轎車,另兩扇門後面各是一頭山羊。你當然更想得到轎車,但你卻無法看到門後面的真實情況。主持人先讓你做第一次選擇。在你選擇了一扇門後, 知道其餘兩扇門後面是什麼的主持人,開啟了另一扇門給你看:那裡有一頭山羊。現在主持人告訴你,你還有一次選擇的機會。那麼,你是堅持第一次的選擇不變呢,還是改變第一次的選擇?
讓我們通過程式來模擬這個遊戲,並計算不同選擇對應的贏車概率:
#include#include//下面是模擬函式,在main函式中每呼叫一次該函式,代表你做出了一次選擇。
//以choice作為引數:choice為1,表示堅持第一次選擇;choice為2,表示做出第二次選擇。
int simulate(int choice)
//因為主持人開啟的門後面是羊不是車,所以dooropenedbyhost != doorbeforecar
//因為主持人開啟的不是你選擇的門,所以dooropenedbyhost != doorfirstchoose
//直到dooropenedbyhost != doorbeforecar 且 dooropenedbyhost != doorfirstchoose時,
//結束迴圈,因為這時dooropenedbyhost的值才是我們需要的。
while(dooropenedbyhost == doorbeforecar || dooropenedbyhost == doorfirstchoose);
//因為門號為0、1、2,所以3扇門的門號之和3。
const int sumofalldoornumbers = 3; //門號之和。
//第一次選的是doorfirstchoose,主持人開啟的是dooropenedbyhost,所以第二次選擇的
//是這兩扇門之外的第三扇門。
//doorsecondchoose:第二次選擇的門號。
int doorsecondchoose = sumofalldoornumbers - doorfirstchoose - dooropenedbyhost;
if(choice == 1) //堅持第一次選擇。
if(choice == 2) //做出第二次選擇。
return 0; //choice的值除了1和2以外,其他都無效:贏車概率為0!
}int main()
double probabilityofwinningcar = 1.0 * sumofwinningcar / sumofsimulations; //贏車概率。
printf("\nthe probability of winnig the car is: %lf\n", probabilityofwinningcar);
return 0;
}
當輸入1時,執行結果為:
當輸入2時,執行結果為:
當輸入其他數字時(無效,如3),執行結果為:
C語言版掃雷
用c語言實現掃雷,首先應該有基本的思路,建立兩個相同大小的陣列,乙個用於布雷 初始化為全0,布雷時將雷置為1 另乙個給使用者展示 初始化為星號,使用者輸入座標後統計周圍雷的分布並列印雷的個數 由於需要統計每個座標周圍類的個數,所以將陣列建立大一圈,以方便統計。若輸了,列印出雷陣告訴玩家雷的分布。具體...
雙截棍 C語言版
雙截棍c 語言版 軟考室的菸味瀰漫坐滿了程式設計師 室裡面的監考官係分已三年 出上午試題的老師練cpu 耍微控制器 硬體功夫最擅長還會邏輯門三極體 他們學生我習慣從小就耳濡目染 什麼軟體跟網路我都耍的有摸有樣 什麼語言最喜歡c 物件導向 想要去英倫美帝學圖靈諾伊曼 怎麼編怎麼編離散數學是關鍵 怎麼編...
棧 C語言版
棧 lifo 運算所限的線性表,限制它的插入和刪除操作僅在表的一段進行。棧頂 top 插入 刪除。另一端為棧底。n 0稱為空棧,插入新元素稱為入棧 進棧。刪除稱為出棧 退棧。特點 先進後出。基本運算 初始化棧 判斷空 入棧 出棧 讀棧頂元素。順序棧儲存結構 初始化棧 stack init 判斷空 入...