算法题——投篮比赛获胜的概率-阿里云开发者社区

开发者社区> 人工智能> 正文

算法题——投篮比赛获胜的概率

简介:

 近日,在和他人闲暇无事的时候,进行篮球投篮比赛。由于本人的投篮命中率比较低,而他的投篮命中率比较高。因此,定了一个规则。采用积分制,初始积分为1分。他投篮,每投中一个球,积分加1分,继续投篮;投不中,换我投篮。我投篮,每投中一个球,积分减1分,继续投篮;投不中,换他投篮。若积分到11分,他获胜;若积分减到0分,我获胜。每局由他先投篮。

  在进行若干局的比赛后,各有胜负。提出了一个问题:他获胜的概率是多少?

  

  把问题数字化

  A和B两人进行投篮,A的命中率为70%,B的命中率为30%。初始积分为1分,每人投中继续投,投不中换人投。A投中积分加1分,B投中积分减1分。积分为11分时,A获胜;积分为0分时,B获胜。问:A获胜的概率是多少?

 

  想到这个问题的时候,没有丝毫头绪。因此采用计算机模拟的方式来计算概率。

  先写了一个函数

  Private Function Winner(ByVal Steps As IntegerByVal ParamArray P() As DoubleAs Boolean
Dim I As Integer = 1, J As Integer = 0
Do While I > 0 And I < Steps
If mR.NextDouble < P(J) Then
I += (-1) ^ J
Else
J = 1 - J
End If
Loop
Return (I > 0)
End Function

 

  这个函数是模拟一次投篮。如下调用:Winner(11, 0.7, 0.3)。表示A的投篮命中是0.7,B的投篮命中是0.3,积分到11表示A获胜。函数返回True表示A获胜,返回False表示B获胜。

  用了一个循环,模拟1000000局,统计A获胜的局数。得到如下结果:816628。

  又反复执行了9个1000000局,结果如下:816502、815734、816220、816972、816756、816473、816636、816226、816290。可以看出,A获胜的概率大致为81.65%

 

  如果积分到21分表示A获胜,那么A获胜的概率是多少呢?

  还是上面的代码。模拟1000000局,统计A获胜的局数。执行10次。结果如下:

  816116、816358、816242、816436、816677、816319、815949、815822、815860、816616

  A获胜的概率大致为81.6%。没有想象中的差异那么大。只是略微少了那么一点点。

 

  那么,如果用数学的计算方法,该如何计算呢?


    本文转自万仓一黍博客园博客,原文链接:http://www.cnblogs.com/grenet/archive/2011/03/22/1991153.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章