2019爱奇艺机试题 红蓝球

红蓝球

题目描述

袋子中装有n个红球和m个蓝球,A,B,C,三人依次抽取小球,若A抽到红球则胜出,B抽到红球则A失败,C陪跑,纯粹出来捣乱。但如果袋内红球被抽完还未决断胜负,则判定为B胜出。
求A胜出概率。

解题思路

模拟抽球过程,采用递归的方式实现概率计算。

python代码

n, m = (int(x) for x in input().split())

def probability(n, m, p):
	if n == 0:	#若没有红球,则胜率为0
		return 0
	if m == 0:	#若没有蓝球,分情况判断
		if p == 'A':	#该A抽,则胜出
			return 1
		if p == 'B':	#该B抽,则失败
			return 0
		if p == 'C':	#该C抽,则判断剩余红球数量
			if n == 1:	#数量为1,则红球被抽完,失败
				return 0
			else:	#数量不为1,则C抽完A抽,胜利
				return 1
	if p == 'A':	#若该A抽,条件概率计算如下
		return n / (n + m) + m / (n + m) * probability(n, m - 1, 'B')
	if p == 'B':	#若该B抽,条件概率计算如下
		return m / (n + m) * probability(n, m - 1, 'C')
	if p == 'C':	#若该C抽,条件概率计算如下
		return (n / (n + m)) * probability(n - 1, m, 'A') + (m / (n + m)) * probability(n, m - 1, 'A')
		
win = probability(n, m, 'A')	#A开始抽

print('%.5f' %win)	

后记

通过率45%,递归超时,仅做参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值