▽1
●
a-kuma3 ●100ポイント ベストアンサー |
Ruby でやってみました。
def get_expected_value(n, hit, need) random = Random.new data = [] 20000.times { a = [] hit.times { a << random.rand(1..n) } data << a.sort[need - 1] } sum = data.inject(0) { |s, i| s += i } sum / data.length.to_f end def challenge(n, hit, need) data = [] 5.times { ev = get_expected_value(n, hit, need) data << ev puts "#{hit} / #{n} : #{need} --> #{ev}" } puts "AVERAGE : #{hit} / #{n} : #{need} --> #{data.inject(0) { |s, i| s += i } / data.length.to_f }\n\n" end challenge(100, 2, 1) challenge(100, 2, 2) challenge(100, 5, 1) challenge(100, 5, 2)
厳密ではないんですが、全体の枚数に比べて当たりの数が少ないので、問題ないでしょう。
出力は、こんな感じ。
2 / 100 : 1 --> 33.88975 2 / 100 : 1 --> 33.91605 2 / 100 : 1 --> 33.7368 2 / 100 : 1 --> 33.84725 2 / 100 : 1 --> 33.8828 AVERAGE : 2 / 100 : 1 --> 33.854530000000004 2 / 100 : 2 --> 67.1916 2 / 100 : 2 --> 66.86195 2 / 100 : 2 --> 67.00155 2 / 100 : 2 --> 67.2567 2 / 100 : 2 --> 66.7357 AVERAGE : 2 / 100 : 2 --> 67.00949999999999 5 / 100 : 1 --> 17.17825 5 / 100 : 1 --> 17.27755 5 / 100 : 1 --> 17.26575 5 / 100 : 1 --> 17.24345 5 / 100 : 1 --> 17.0687 AVERAGE : 5 / 100 : 1 --> 17.206739999999996 5 / 100 : 2 --> 33.84685 5 / 100 : 2 --> 33.762 5 / 100 : 2 --> 33.84545 5 / 100 : 2 --> 33.9635 5 / 100 : 2 --> 33.8712 AVERAGE : 5 / 100 : 2 --> 33.8578
まとめると、こんな感じです。
当たりの数 | 欲しい数 | 回数の期待値 |
---|---|---|
2 | 1 | 33.85 |
2 | 2 | 67.01 |
5 | 1 | 17.21 |
5 | 2 | 33.86 |