我最近觀看了一個關於蒙蒂霍爾問題的視頻,並發現它很有趣,所以我想實施它來查看概率是否如預測的那樣真正達到了66.6%。蒙蒂霍爾執行
這裏是我有什麼,
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int repeat = 5000000, i;
int win = 0, lose = 0;
for (i = 1; i <= repeat; i++) {
int winDoor = rand();
winDoor = winDoor % 4;
int firstPick = rand();
firstPick = firstPick % 4;
if (winDoor == firstPick) {
lose++;
} else {
win++;
}
}
printf("%.2f percent win rate\n", ((float)win/(float)repeat)*100.00);
}
但是,我似乎得到一個雙贏率爲75%(按開關門)與上面的代碼。我的代碼有問題嗎?還是66.6%(2/3)的謊言?
P.S.我實施的邏輯是,如果首先挑選勝利門,通過切換,我們輸了。如果首先挑選失敗的門,通過切換,我們贏了。這就是我理解蒙蒂霍爾問題的方式。
編輯:我實際上把%4寫入,因爲我讀到%4將代表0-3。我忘了我需要1-3,而不是0-3。問題解決了。
只適用於3門,但你似乎使用4'winDoor%4'。如果剛開始你已經做了四門,你甚至可以再次選擇一個鬆動的門。 – Yunnosch
這實際上並沒有效仿蒙蒂爾大廳的問題,問題的數學癥結在於莊家打開剩餘的門,玩家選擇切換 –