赞 | 0 |
VIP | 135 |
好人卡 | 6 |
积分 | 3 |
经验 | 37799 |
最后登录 | 2020-4-30 |
在线时间 | 812 小时 |
Lv2.观梦者 旅之愚者
- 梦石
- 0
- 星屑
- 255
- 在线时间
- 812 小时
- 注册时间
- 2007-7-28
- 帖子
- 2148
|
回复 叶子 的帖子- def calculate_p(n , x , y , z)
- return 0 if n < x + y + z
- total_p = 0
- for i in x..(n - y - z)
- for j in y..(n - i - z)
- total_p += delta_p(i , j , n - i - j)
- end
- end
- total_p * (1 / 3.0) ** n
- end
- def delta_p(x , y , z)
- n = x + y + z
- return (plus(n) / plus(x) / plus(y) / plus(z))
- end
- def plus(n)
- return 1 if n == 0
- return [*1..n].inject{|x , re| re *= x}
- end
复制代码 直接用calculate_p(n,x,y,z)计算,参数依次为抽取总牌数,A的张数,B的张数和C的张数,没有限制的牌请用0
另外两个为辅助方法,delta_p用于计算某一abc张ABC时的组合数,plus用于计算阶乘 |
|