#include<iostream>
#include<gsl/gsl_rng.h> //Compile option -lgls -lgslcblas
using namespace std;
int main(void){
const int nn=1e6;
int car, man, hst;
double unchange(0), change(0);
//Random number generator related, gsl is used below
int seed(time(0));
const gsl_rng_type *T;
gsl_rng *r;
gsl_rng_env_setup();
T = gsl_rng_default; //default is mt19937
r = gsl_rng_alloc(T);
gsl_rng_set(r,seed);
for(int i=0; i<nn; ++i){
car=gsl_rng_uniform(r)*3; // car is put here
man=gsl_rng_uniform(r)*3; // the man chose one door
if(man==car) ++unchange; //will be 1/3 anyway if the man sticks
//now the host open one, it must be different from man
hst=man;
while(hst==man) hst=gsl_rng_uniform(r)*3;
if(hst!=car) //if the host has bad luck
// then the man changes his mind
if(car!=man)++change; // he is lucky only if car!=man
}
change/=nn;
unchange/=nn;
cout<<change<<endl<<unchange<<endl;
return 0;
}
The results are both 1/3