generated at
飛行機座席問題2

飛行機座席問題を少し変えてみる

100人乗りの飛行機があり,乗客は100人いる
搭乗券には席番号が書かれている
99%の人はきちんと自分の席に座ろうとするのだが、1%の人は空いてる席に勝手に座る
最後の客が自分の席に座れる確率は?

これは解析的に解けるか疑わしいが、シミュレーションなら簡単に解ける。
つまり、真面目に考えるよりもとにかくシミュレートする方が速いことになる
ていうかシミュレーション以外に解く方法はあるか??

ruby
ok = 0 # 自分の席に座れた場合 notok = 0 # 座れなかった場合 10000.times { # 何回も試してみて結果を計算する a = (0...100).to_a.shuffle seats = [] # ひとり目から99人目まで (0..98).each { |i| if rand > 0.01 # 真面目な人 if !seats[a[i]] # 自分の席が空いてたら seats[a[i]] = true # 普通に座る else # 誰かがすでにすわってたら while true # 空いてる席を探す i = rand(100) unless seats[i] # 空いてる席がみつかったので seats[i] = true # そこに座る break end end end 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}"