本帖最后由 taroxd 于 2015-1-1 13:15 编辑
三/2
WWW_BBB
WWWB_BB
WW_BWBB
W_WBWBB
WBW_WBB
WBWBW_B
WBWBWB_
WBWB_BW
WB_BWBW
_BWBWBW
B_WBWBW
BBW_WBW
BBWBW_W
BBWB_WW
BB_BWWW
BBB_WWW
---
三/3
0 0
5 0
0 5
5 5
2 8
2 0
0 2
5 2
0 7
5 7
4 8
4 0
---
require 'mathn' # 排列数 def permutation(m, n) return 0 if m < n ((m-n+1)..m).inject(:*) end # 第 n 号位的分数是 score 时,他比前 n - 1 个人都要优秀的概率 def highest(score, n) permutation(score - 1, n - 1) / ( # 前 n - 1 个人分数都比 score 低的排列数除以 permutation(99, n - 1)) # 前 n - 1 个人所有的排列数 end # n + 1 号学生比前 n 个学生都优秀,且 n + 1 号学生不是最优秀的学生的概率 def reject(n) (1..99).inject(0) { |sum, score| sum + highest(score, n + 1) } / 100 end expectations = {100=>0.01r, 99=>0.01r} # n = 99,100 时,概率为 0.01 98.downto(1) do |n| expectations[n] = expectations[n + 1] * (1 - reject(n)) + 0.01r end expectations.reverse_each do |n, e| puts "#{n} => #{e.to_f}" end
require 'mathn'
# 排列数
def permutation(m, n)
return 0 if m < n
((m-n+1)..m).inject(:*)
end
# 第 n 号位的分数是 score 时,他比前 n - 1 个人都要优秀的概率
def highest(score, n)
permutation(score - 1, n - 1) / ( # 前 n - 1 个人分数都比 score 低的排列数除以
permutation(99, n - 1)) # 前 n - 1 个人所有的排列数
end
# n + 1 号学生比前 n 个学生都优秀,且 n + 1 号学生不是最优秀的学生的概率
def reject(n)
(1..99).inject(0) { |sum, score| sum + highest(score, n + 1) } / 100
end
expectations = {100=>0.01r, 99=>0.01r} # n = 99,100 时,概率为 0.01
98.downto(1) do |n|
expectations[n] = expectations[n + 1] * (1 - reject(n)) + 0.01r
end
expectations.reverse_each do |n, e|
puts "#{n} => #{e.to_f}"
end
结果这样算出来是 33,不知道哪里算错了 |