julian@axcn01.cern.ch (Julian James Bunn):
I stand corrected, having now simulated the damn thing ... the results from the simulation (program enclosed) being:
Number of games 100000 No change wins 33324 33.32400 Swap wins 66676 66.67600
I still find it preposterous, and am quite flabbergasted. Thanks to everyone who has tried to explain it to me ...
Julian
Program ThreeDoor integer seed /9876/ integer taken(3) real v c v = ran(seed) ! initialise prng ngames = 0 ! counts the total games n_no_change = 0 ! counts the number of wins with no change n_change = 0 ! counts the number of wins when swapping doors do 1 igame = 1,100000 v = ran(seed) c c Define the door behind which the prize is concealed c if(v.lt.0.333333) then iprize = 1 else if(v.ge.0.666666) then iprize = 3 else iprize = 2 endif c c Randomise the guest's selection c v = ran(seed) if(v.lt.0.333333) then iselect = 1 else if(v.gt.0.666666) then iselect = 3 else iselect = 2 endif c c Count for no change strategy c ngames = ngames + 1 if(iselect.eq.iprize) n_no_change = n_no_change + 1 c c Find which door the host opens ... c do j=1,3 taken(j) = 0 end do taken(iselect) = 1 taken(iprize) = 1 do j=1,3 if(taken(j).eq.0) iopen = j end do c c and thus which the guest swaps to ... c do j=1,3 if(j.ne.iopen.and.j.ne.iselect) iswap = j end do c c Count for swap strategy c if(iswap.eq.iprize) n_change = n_change + 1 1 continue c write(6,*) 'Number of games ',ngames write(6,*) 'No change wins ',n_no_change,100.*n_no_change/ngames write(6,*) 'Swap wins ',n_change,100.*n_change/ngames end