Dan
Dan

Reputation: 1001

Monty Hall implementation

I recently watched a video regarding the Monty Hall problem and found it interesting, so I thought of implementing it to see if the probability is truly 66.6% as predicted.

Here is what I have,

#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);
}

However, I seem to be getting a 75% win rate (by switching doors) with the above code. Is there something wrong with my codes? Or is the 66.6% (2/3) a lie?

P.S. The logic I implemented is, if winning door is first picked, by switching, we lose. If losing door is first picked, by switching, we win. That's how I understand the Monty Hall problem.

EDIT: I actually put %4 because I read that %4 will represent 0-3. I forgot I need 1-3, not 0-3. Question resolved.

Upvotes: 2

Views: 441

Answers (2)

rma
rma

Reputation: 1958

You're choosing from 4 doors, not 3. change your %4 to a %3.

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 % 3;

        int firstPick = rand();
        firstPick = firstPick % 3;

        if (winDoor == firstPick) {
            lose++;
        } else {
            win++;
        }
    }

    printf("%.2f percent win rate\n", ((float)win/(float)repeat)*100.00);
}

Upvotes: 2

Barmar
Barmar

Reputation: 782064

The reason is that you're using % 4 instead of % 3. That simulates 4 doors instead of 3, so the result changes from 2/3 to 3/4.

Upvotes: 3

Related Questions