编程题第二题python思路

第一题有人发了,贴一下第二个题
# 抽奖
# 时间限制:C/C++语言 1000MS;其他语言 3000MS
# 内存限制:C/C++语言 65536KB;其他语言 589824KB
# 题目描述:
# A和B两个人在抽奖。现在有一个抽奖箱,里面有n张中奖票,m张不中奖票。A和B轮流从中抽一张奖票出来。如果有人抽到中奖票就结束,抽到中奖票的人胜利。抽过的奖票会被丢弃。

# 额外的,B每次抽后,会再次抽取一张票并丢弃掉(这张票中奖不算B胜利)。

# 现在,A先抽,请问A的胜率,保留4位小数后输出。

# 如果两人到最后也没有抽到中奖票算作B胜利。

# 输入
# 输入两个数字n,m,代表中奖票和不中奖票的数量 (0≤n,m≤1000)

# 输出
# 输出A的胜率,保留4位小数。


# 样例输入
# 2 3
# 样例输出
# 0.6000

# 提示
# 样例输入2
# 1 3
# 样例输出2
# 0.5000
# 样例二解释:
# 如果A第一轮抽到中奖票,A胜利,概率0.25。
# 如果A第二轮抽到中奖票,情况为A第一轮没有抽到中奖票,B也没有抽到中奖票,并且B丢弃掉的奖票也不是中奖票。概率为3/4 * 2/3 * 1/2=0.25
# 综上,中奖率为0.5。
# 规则
# 请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果
# 点击“调试”亦可保存代码
# 编程题可以使用本地编译器,此页面不记录跳出次数

n,m=map(int,input().split(" "))
# A先抽A赢的概率。
def funa(n,m):
if n==0:return 0
if m==0:return 1
return n/(m+n)+(m/(m+n))*funb(n,m-1)

# B先抽A赢的概率。
def funb(n,m):
if m==0:return 0
if n==0:return 1
if m==1:return 1/(n+1)
return (m/(m+n))*(((m-1)/(m+n-1))*funa(n,m-2)+(n/(n+m-1))*funa(n-1,m-1))

print('%.4f'%funa(n,m))

#360笔试324编程题二##Python##笔试题目#
全部评论
需要添加记忆,要不就超时了
点赞 回复
分享
发布于 2020-03-25 16:17

相关推荐

点赞 5 评论
分享
牛客网
牛客企业服务