//The Monty Hall Problem
#include <iostream>
#include <cstdlib>	// Needed for random numbers

using namespace std;

// ====================
//     main function
// ====================

int main()
{
  int i;
  int numWinsStay = 0;
  int numWinsSwitch = 0;
  int prizeDoor, choiceDoor, switchDoor, revealDoor;

  // Run simulation 10,000 times
  for (i=0; i<10000; i++)
  {
	prizeDoor = rand() % 3;		// Pick door with prize behind it
	choiceDoor = rand() % 3;	// Door of contestant's pick

	// Find a door to reveal that is not the prize and not the contestant's
	// choice
	//两个while始终保持choicedoor,switchdoor,revealdoor为三个不同值:0,1,2。
	//prizedoor则为其中一个。
	revealDoor = 0;
	while ((revealDoor == prizeDoor) || (revealDoor == choiceDoor))
	{
		revealDoor++;
	}

	// Find a door if the contestant switches
	switchDoor = 0;
	while ((switchDoor == choiceDoor) || (switchDoor == revealDoor))
	{
		switchDoor++;
	}
	// See if we would have won and increment counters
	if (choiceDoor == prizeDoor)
	{
		numWinsStay++;
	}
	else if (switchDoor == prizeDoor)
	{
  		numWinsSwitch++;
	}
  }

  cout << "If you switch, you will win " << (numWinsSwitch / 100) << "%"
	<< " of the time. " << endl;
  cout << "If you stay, you will win " << (numWinsStay / 100) << "%"
	<< " of the time. " << endl;

  return 0;
}

The Monty Hall Problem