飛行機座席問題
100人乗りの飛行機があり,乗客は100人いる
搭乗券には席番号が書かれている
最初に乗った客がチケットをなくしたので適当に座ることにした
次の客は自分の席が空いていればそこに座る,埋まっていたら適当な席に座る.次も同じ...
さて,最後の客が自分の席に座れる確率は?
出典:
松下智氏がFacebookで紹介していたもの
もともとどこかのラジオ番組(Car Talk?)で聞いたものらしい
ちょっと考えれば計算できるのだが、
シミュレーション計算すると答が確認できるので面白い。

rubyok = 0 # 自分の席に座れた場合
notok = 0 # 座れなかった場合
10000.times { # 何回も試してみて結果を計算する
a = (0...100).to_a.shuffle
seats = []
# ひとり目 勝手なとこに座る
i = rand(100)
seats[i] = true
# ふたり目から99人目まで
(1..98).each { |i|
if !seats[a[i]] # 自分の席が空いてたら
seats[a[i]] = true # 普通に座る
else # 誰かがすでにすわってたら
while true # 空いてる席を探す
i = rand(100)
unless seats[i] # 空いてる席がみつかったので
seats[i] = true # そこに座る
break
end
end
end
}
# 100人目の席は空いてるか?
if seats[a[99]] # 空いてなかった
notok += 1
else # 空いてた!
ok += 1
end
}
puts "自分の席に座れた=#{ok}, 座れなかった=#{notok}"