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

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

  近日,在和他人闲暇无事的时候,进行篮球投篮比赛。由于本人的投篮命中率比较低,而他的投篮命中率比较高。因此,定了一个规则。采用积分制,初始积分为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 Integer, ByVal ParamArray P() As Double) As 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%。没有想象中的差异那么大。只是略微少了那么一点点。

 

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

  

相关文章
|
缓存 关系型数据库 MySQL
MySQL Binlog--事务日志和BINLOG落盘参数对磁盘IO的影响
MySQL Binlog--事务日志和BINLOG落盘参数对磁盘IO的影响
385 0
|
存储 索引
维度表和事实表的区别
转载:转载:https://blog.csdn.net/qq_56870570/article/details/118938411
5862 0
|
7月前
|
Oracle Java 关系型数据库
java 入门学习视频_2025 最新 java 入门零基础学习视频教程
《Java 21 入门实操指南(2025年版)》提供了Java最新特性的开发指导。首先介绍了JDK 21和IntelliJ IDEA 2025.1的环境配置,包括环境变量设置和预览功能启用。重点讲解了Java 21三大核心特性:虚拟线程简化高并发编程,Record模式优化数据解构,字符串模板提升字符串拼接可读性。最后通过图书管理系统案例,展示如何运用Record定义实体类、使用Stream API进行数据操作,以及结合字符串模板实现控制台交互。该指南完整呈现了从环境搭建到实际项目开发的Java 21全流程实
359 1
|
缓存 前端开发 Java
使用http-server搭建静态文件服务器
本文介绍几种搭建静态文件服务器的方式,着重介绍基于node的http-server用法。
使用http-server搭建静态文件服务器
|
数据挖掘 数据库
化学成分检测材料分析流程丨样品分析流程方案
化学成分检测涉及样品准备、分析方法选择(如光谱、色谱、质谱、能谱法)、样品分析、数据解读、结果验证及报告撰写。此过程需依据样品类型和待测成分选择合适方法,并可能需专业机构协助。
|
监控 Java
线程池大小如何设置
在并发编程中,线程池是一个非常重要的组件,它不仅能够提高程序的响应速度,还能有效地利用系统资源。合理设置线程池的大小对于优化系统性能至关重要。本文将探讨如何根据应用场景和系统资源来设置线程池的大小。
|
负载均衡 调度 Android开发
有关big.LITTLE,你需要知道的十件事情
有关big.LITTLE,你需要知道的十件事情
414 0
|
机器学习/深度学习 自然语言处理 Java
ChatGLM-6B一键安装,马上使用(windows)!!
ChatGLM-6B一键安装,马上使用(windows)!!
398 0
|
JavaScript Java 测试技术
基于小程序的校园二手交易平台+springboot+vue.js附带文章和源代码设计说明文档ppt
基于小程序的校园二手交易平台+springboot+vue.js附带文章和源代码设计说明文档ppt
300 0
|
JavaScript 数据处理 Python
Python | 看看豆瓣Top250电影有哪些?
这段时间在学习`Python` ,练习一下,爬一下豆瓣Top250的电影有哪些?
276 0