Pythonで解いてみた。(monty.py)(笑)
# -*- coding: cp932 -*- import random # ifchange: ドアを変えるかどうか # size: ドアの数 # 戻り値:当たりかはずれか def monty(ifchange,size): list = range(size) ans = random.choice(list) first = random.choice(list) notfirstchoice = list[:] del notfirstchoice[first] # 最初の選択以外のリスト if ans == first: # 司会者が残すもう一つのドアは remnantdoor = random.choice(notfirstchoice) else: remnantdoor = ans if ifchange: final = remnantdoor else: final = first return ans == final def trialmonty(ifchange=True, count=10000, size=3): if (size < 3) and (type(size) == type(3)): print "sizeは3以上の整数でなくてはいけません." prizecount = 0 for x in range(count): if monty(ifchange,size): prizecount += 1 return prizecount
WindowsのIDLE上で実行
>>> >>> trialmonty() 6629 >>> trialmonty() 6621 >>> trialmonty(False) 3385 >>> trialmonty(False) 3354 >>> trialmonty(size=4) 7519 >>> trialmonty(True,100000,4) 74954
余談だけどドアが3つの時、初期状態で当たる確率が1/3でそれ以外のドアがあたりの確率は2/3だ。司会者は2/3の方を1つの選択肢としてまとめてるってことだね。(あたりが(当たり前だけど)1つある場合はあたりに、すべてはずれの場合ははずれに)
このゲームは最初から、選択肢を減らした後でもういちど最後の選択ができる、と明示されてないと司会者が意地悪しそうだよな。最初の選択が当たってるときだけ、もう一度選択権があることにしよう、とか。