2012-10-28 16 views
0
#include <stdio.h> 
#include <time.h> 
int main(void) 
{ 
    int games = 0; 
    int stayWins = 0; 
    int switchWins = 0; 
    int chosenDoor; 
    int remainingDoor; 
    int revealedDoor; 
    int winningDoor; 
    int option; 

    srand (time(NULL)); 

    do 
    { 
    chosenDoor = rand() % 3 + 1; 
    winningDoor = rand() % 3 + 1; 
     do 
     { 
      revealedDoor = rand() % 3 + 1; 
     } while (revealedDoor == chosenDoor || revealedDoor == winningDoor); 

     do 
     { 
      remainingDoor = rand() % 3+1; 
     } while (remainingDoor == chosenDoor || remainingDoor == revealedDoor); 

     option = rand() % 2 + 1; 
     if (option == 1) 
     { 
      if (chosenDoor == winningDoor) 
      { 
       stayWins++; 
      } 
     } 
     if (option == 2) 
     { 
      chosenDoor = remainingDoor; 
      if (chosenDoor == winningDoor) 
      { 
        switchWins++; 
      } 
     } 
     games++; 
    } while (games < 10000); 

printf("Out of 10,000 games, the contestant won %d times by staying with his/her original choice and won %d times by switching his/her choice.",stayWins,switchWins); 

    return 0; 
} 

傍晚的夥計, 這是一個完整的蒙蒂霍爾問題代碼,打印10000場比賽的結果。代碼將爲用戶選擇所選的門。我怎樣才能改變它,使程序將允許用戶選擇自己? 以及如何修改它,使程序不會爲程序隨機化'1'或'2'的值,而是允許我選擇切換? 我的進步...... 取而代之的是:蒙蒂霍爾遊戲:如何讓用戶選擇門而不是程序自動隨機選擇?

chosenDoor = rand() % 3 + 1; 

使用此,只有可接受的輸入爲1,2或3:

printf("Choice:"); 
scanf("%d",&chosenDoor); 

這是在正確的軌道?我知道此時用戶需要在節目「完成」之前輸入他的選擇10,000次,那麼是否有辦法將第一選擇應用於其他9,999次試驗?

回答

1

有沒有辦法將第一選擇應用到其他9999次試驗中?

移動外循環的代碼的

printf("Choice: "); 
scanf("%d", &chosenDoor); 

一部分。

+0

神奇,謝謝冠軍。 – user1742525