1
#include <stdio.h>
#include <time.h>

int main(void)
{
    static int games = 0;
    static int stayWins = 0;
    static int switchWins = 0;
    int chosenDoor;
    int remainingDoor;
    int revealedDoor;
    int winningDoor;
    int option;

    printf("Type 0 to stop choosing and print results:  ");

    srand (time(NULL));
    do
    {
    printf("Choose door 1, 2, or 3:  ");
    scanf("%d",&chosenDoor);

    if (chosenDoor==0)
        break;

    printf("Enter '1' for stay; Enter '2' for switch:");
    scanf("%d",&option);

    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)
            {
                printf("You win.\n");
                stayWins++;
            }
            else
            {
                printf("You lose.\n");
            }
        }
        if (option == 2)
        {
            chosenDoor = remainingDoor;
            if (chosenDoor == winningDoor)
            {
                printf("You win.\n");
                switchWins++;
            }
            else
            {
                printf("You lose.\n");
            }
        }
        games++;
    } while (chosenDoor!=0);

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

    return 0;
}

ユーザーが 3 つのドアから 1 つのドアを選択するモンティ ホール ゲームを実行するコードを次に示します。1 つのドアには賞品があり、他の 2 つのドアには偽物があります。ユーザーは、ドア 1、2、または 3 を選択し、プログラムが偽のドアの 1 つを開いたときにドアを切り替えるかどうかを選択します。

プログラムにドアを開けさせるにはどうすればよいですか。このドアは、後ろに賞品がなく、ユーザーが選んでいないドアである必要があり、その決定を出力します。

これが印刷されたものです:

...
Choose door (1,2,3): 
Enter 1 for stay; 2 for switch: 
You win/lose.
...

ここに私が印刷したいものがあります:

...
Choose door (1,2,3): 
Door X has been opened to reveal a false door.
Enter 1 for stay; 2 for switch: 
You win/lose.
...

皆様のご協力に感謝いたします。ありがとう、乾杯!

4

1 に答える 1

0

ランダムなドアを選択し、そのドアが選択されたドアおよび/またはプライズ ドアである場合は、ドア番号を増減します。

1、2、3、1、2、3、... の順序で次のドアにインクリメントするには:

door = door%3 + 1;

デクリメントするには:

door = (door + 1)%3 + 1;

...または単に2回インクリメントします。

于 2012-10-29T00:33:07.377 に答える