假設你在進行一個遊戲節目。現給三扇門供你選擇:一扇門後面是一輛轎車,另兩扇門後面分別都是一頭山羊。你的目的當然是要想得到比較值錢的轎車,但你卻並不能看到門後面的真實情況。主持人先讓你作第一次選擇。在你選擇了一扇門後,知道其餘兩扇門後面是什麼的主持人,開啟了另一扇門給你看,而且,當然,那裡有一頭山羊。現在主持人告訴你,你還有一次選擇的機會。那麼,請你考慮一下,你是堅持第一次的選擇不變,還是改變第一次的選擇,更有可能得到轎車?
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一道引起全美大學生舉國辯論的邏輯題 那個文章是我從論壇轉過來的,因為自己想成為程式員,所以比起機率理論,自己更相信程式的結果。
以下轉自CSDN論壇:
lumber(木材) :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand((unsigned)time(NULL));
int count_static = 0;
int count_change =0;
for (int trytimes = 0; trytimes < 1000000; trytimes++) {
int carroom = 1+(int)(3.0*rand()/(RAND_MAX+1.0));
int selected = 1+(int)(3.0*rand()/(RAND_MAX+1.0));
if (carroom == selected)
count_static++;
}
printf("if you do not change you selection,you can select car %d times in 1000000 times/n", count_static);
srand((unsigned)time(NULL));
for (int trytimes2 = 0; trytimes2 < 1000000; trytimes2++) {
int carroom = 1+(int)(3.0*rand()/(RAND_MAX+1.0));
int selected = 1+(int)(3.0*rand()/(RAND_MAX+1.0));
int del_room = 1+(int)(3.0*rand()/(RAND_MAX+1.0));
while(del_room == carroom || del_room == selected){ //delete room shouldn't be car room and select room
del_room = 1+(int)(3.0*rand()/(RAND_MAX+1.0));
}
int select_again = 1+(int)(3.0*rand()/(RAND_MAX+1.0));
while(del_room == select_again || select_again == selected) {
select_again = 1+(int)(3.0*rand()/(RAND_MAX+1.0));
}
if (carroom == select_again)
count_change++;
}
printf("if you change you selection first,you can select car %d times in 1000000 times/n", count_change);
return 0;
}
這個代碼的運行結果,能夠說明換了之後贏得汽車的機率是2/3!!比1/2要高。
大家請注意,換了之後贏車的機率2/3~~請大家記住這個真實的,經過程式1000000次隨機測試的結果。想辦法讓自己相信這個答案然後再看下邊的理論分析,不要在短時間否定這個實驗結果!
------------------------------------------------------------------------------------------------------------------------------------------------------
請看理論的論證:
以下雖然也是轉貼,但是自己的想法和這個人的想法出乎意料的一致,為了避免重複勞動,還是選擇轉貼:
jyk(喜歡編程。和氣生財。共同提高。共同進步) :
一扇門後面是一輛轎車,另兩扇門後面分別都是一頭山羊。你的目的當然是要想得到比較值錢的轎車,但你卻並不能看到門後面的真實情況。主持人先讓你作第一次選擇。在你選擇了一扇門後,知道其餘兩扇門後面是什麼的主持人,開啟了另一扇門給你看,而且,當然,那裡有一頭山羊。現在主持人告訴你,你還有一次選擇的機會。那麼,請你考慮一下,你是堅持第一次的選擇不變,還是改變第一次的選擇,更有可能得到轎車?
====================
這裡有兩個關鍵點:
1、在你選擇了一扇門後,知道其餘兩扇門後面是什麼的主持人 。
說明主持人是知道正確答案的,他一定會開啟一個關著羊的門,而不是瞎蒙的。
2、更有可能得到轎車?
很明顯,問的是可能性(機率),換和不換哪個機率高!
而不是說換了就一定能得到汽車!
結論:換的機率要比不換的高。
設想一個理想的環境:在特殊平均的情況下,猜三次
換的情況
1、我選中車,主持人開啟了一個羊的門,我換了,結果得到了一隻羊。
2、我選中羊a,主持人開啟了另一個羊的門,我換了,結果得到了車。
3、我選中羊b,主持人開啟了另一個羊的門,我換了,結果得到了車。
我猜三次,有兩次會得到車。2/3
不換 的情況
1、我選中車,主持人開啟了一個羊的門,我沒有換了,結果得到了一隻車。
2、我選中羊a,主持人開啟了另一個羊的門,我沒有換了,結果得到了羊a。
3、我選中羊b,主持人開啟了另一個羊的門,我沒有換了,結果得到了羊b。
我猜三次,只有一次會得到車。 1/3
什嗎?你說太絕對了。其實機率就是這樣,才的次數少的時候,很沒有規律,但是當你猜了10萬次以後,你會發現機率就是這樣。
自己最後把理論概括一下:
假如你當時抱著一定換的決心:
第一次選擇時,你如果猜對了汽車(這種情況只有1/3的機率),你卻執意要換,那麼你的第二次選擇將是羊(也就是說“這1/3的第一次選車的機率”變為了“1/3第二次選羊的機率”)。
第一次選擇時,你如果選中了羊(這種情況有2/3的機率),你執意要換,那麼你的第二次選擇的將是車(因為,主持人幫你排除了一個錯誤的答案,也就是“這2/3第一次選羊的機率”變為了“2/3選車的機率”了)。