モンティ・ホール問題を数学の先生から聞いたのですが、本当に不思議な問題です。よく分からなかったので、シミュレーションをしてみました。
試行回数は100000回です。
#!/usr/bin/ruby # -*- coding: utf-8 -*- $KCODE = 'UTF8' LOOP_TIMES = 1000000 t = Time.now srand(t.sec ^ t.usec ^ Process.pid) unchanged = 0 # 最後まで選択を変えない changed = 0 # 途中で選択を変更する LOOP_TIMES.times do hit = rand(3) # 当たりくじ first_ans = rand(3) # Playerの1回目の選択 remove = nil # 取り除く箱を決定 loop do remove = rand(3) break if hit != remove && first_ans != remove end second_ans = nil # Playerの2回目の選択 loop do second_ans = rand(3) break if remove != second_ans && first_ans != second_ans end unchanged += 1 if first_ans == hit changed += 1 if second_ans == hit end puts "当たる確率…" puts "最後まで選択を変更しない場合 : #{unchanged.to_f/LOOP_TIMES}" puts "途中で選択を変更した場合 : #{changed.to_f/LOOP_TIMES}"