前一阵子看了Hello上有个麦序捕鱼的游戏,其规则大概是这样的:
- 两个人(相当于庄家)从0到8中各抽一个数字a和b(每种个数字出现的概率是等概的)
- 玩家在从0到8中抽1个数字c,若这个数字在以上两个数字之间(a<c<b或者b<c<a),则玩家获胜,否则玩家落败
现在来算一下玩家获胜的概率
基本思路
- 从0到8总共有9种状态,为了方便起见,假设总共有n种状态,那么,所有的可能总共有n3种
- 接下来,计算玩家获胜的可能性,获胜的种类以|a-b|区分
- |a-b|<=1时,这个时候无论c取值为多少,玩家都会输,因此没有获胜的可能
- 如果|a-b|=2(n>2,这个可能性总共有(n-2)*2种(如果a<b,则总共有(n-2)种可能,反之也有(n-2种可能)),在这个条件下,c只有1种可能才能满足获胜条件,因此总共有1*(n-2)*2种了能
- 如果|a-b|=i(n>i),不难得出这个可能性总共有(n-i)*i种,该条件下c满足条件的可能有i-1种
- 把这些获胜的可能求和,在除以n3便可得出获胜的概率
编程实现(swift)
func rate(number n:Int)->Double{
if n<3{
return 0.0
}
var totalCount = 0
for i in 1..<n{
//totalCount += i*(n-1-i)*2
totalCount += (i-1)*(n-i)*2
}
return Double(totalCount)/pow(Double(n),3)
}
计算结果
当n为9时,获胜概率为0.2304
当n→∞时,获胜概率收敛于0.3333...