Excel·VBA二维数组组合函数的应用实例之概率计算

news/2024/7/4 23:09:22 标签: excel, vba, 概率论, 排列组合

看到一个视频《李永乐老师的抖音 - 骰子概率问题》,计算投出6个骰子恰好出现1、2、3、4、5、6这6个点数的概率

  • 李永乐老师的计算方法是,第1个概率为1即6/6,第2个不与之前相同的概率为5/6,第3个同理概率为4/6,因此该问题的概率为
1*5/6*4/6*3/6*2/6*1/6 约等于 0.015432
  • 当然也可以这么计算,各个骰子分别出现1、2、3、4、5、6这6个点数的概率都为1/6,而排列的顺序个数有P(6,6) = 6!/(6-6)!即720个《Excel·VBA数组排列函数》,那么该问题的概率为
(1/6)^6*720 约等于 0.015432
  • 同样也可以这么计算,6个骰子一共能够出现6^6共46656种情况,其中点数符合1、2、3、4、5、6这6个的概率为
720/(6^6) 约等于 0.015432

以上3中计算思路是等价的,第3种方法可以使用《Excel·VBA二维数组组合函数、组合求和》combin_arr2d函数,生成组合结果进行验证
以下代码调用了《Excel·VBA数组行列转换函数》TransposeArr函数(如需使用代码需复制)

Sub 概率计算组合穷举验证()
    Dim arr, brr, i&, j&, x, res&, s$
    arr = [{1,2,3,4,5,6; 1,2,3,4,5,6; 1,2,3,4,5,6; 1,2,3,4,5,6; 1,2,3,4,5,6; 1,2,3,4,5,6}]
    tm = Timer: brr = combin_arr2d(arr)  '调用函数返回组合,一维嵌套数组
    [a1].Resize(UBound(brr), 6) = TransposeArr(brr, 2)  '转为二维数组,写入表格
    For i = 1 To UBound(brr)
        j = 0
        Do
            j = j + 1: x = Application.Match(j, brr(i), 0)
            If TypeName(x) = "Error" Then Exit Do
        Loop Until j = 6
        If TypeName(x) <> "Error" Then res = res + 1: s = s & "," & i
    Next
    Debug.Print "累计用时:" & Format(Timer - tm, "0.00")  '耗时
    Debug.Print UBound(brr) & "种组合,其中" & res & "种组合内元素不重复"
    Debug.Print "对应行号:" & s
End Sub
  • 验证结果(部分截图)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

http://www.niftyadmin.cn/n/5302312.html

相关文章

基于Vue开发的一个仿京东电商购物平台系统(附源码下载)

电商购物平台项目 项目完整源码下载 基于Vue开发的一个仿京东电商购物平台系统 Build Setup # csdn下载该项目源码压缩包 解压重命名为sangpinghui_project# 进入项目目录 cd sangpinghui_project# 安装依赖 npm install# 建议不要直接使用 cnpm 安装以来&#xff0c;会有各…

vc2017编译从github网站上下载的源码

以ZLmediakit为例 1.下载软件 cmakehttps://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5-windows-x86_64.zip Microsoft Visual Studio https://my.visualstudio.com/Downloads?qvisual%20studio%202017&wt.mc_ido~msft~vscom~older-downloads …

钡铼分布式IO在玻璃制造中的实时数据采集与监控应用介绍

导读 玻璃行业多年来一直广泛使用 PLC 来帮助管理生产过程所需的精确材料比例&#xff0c;完全依赖其PLC进行数据采集与控制&#xff0c;并且大量依靠人工来操作&#xff0c;所以这些高成本推动了对成本较低的替代方案的需求。 场景描述 某玻璃厂生产的玻璃生产包括配料段、熔…

ROS 传感器—相机的介绍

在ROS中&#xff0c;相机是一种常见的传感器设备&#xff0c;用于获取视觉信息。ROS支持多种类型的相机&#xff0c;并提供了统一的接口和工具来处理相机数据&#xff0c;使得开发者可以方便地在不同硬件平台上实现视觉功能。 在ROS中&#xff0c;可以通过usb_cam、camera_dri…

3个.NET开源简单易用的任务调度框架

前言 今天分享3个.NET开源、简单、易用的任务调度框架&#xff0c;帮助大家在做定时任务调度框架技术选型的时候有一个参考。 Quartz.Net Quartz.NET是一个功能齐全的开源作业调度系统&#xff0c;可用于从最小的应用程序到大规模企业系统。 Quartz.NetUI Quartz.NetUI是一…

C# .Net 开发设计多用户网上商城源码_OctShop

随着C#在TIOBE编程语言排行不断上升&#xff0c;这也标志着越来越多的程序员开始使用C#来开发项目了。在TIOBE2023年10月公布的排行中&#xff0c;C#和Java之间的差距越来越小了&#xff0c;仅为1.2%&#xff0c;随着C# .NetCore的免费开源&#xff0c;这一上升的趋势越来越明显…

60.Go反射库reflect

文章目录 一、简介二、前置总结三、接口四、反射基础五、反射用法1、透视数据组成2、调用函数或方法3、设置值4、StructTag 六、实战案例 一、简介 反射是一种机制&#xff0c;在编译时不知道具体类型的情况下&#xff0c;可以透视结构的组成、更新值。使用反射&#xff0c;可…

设计模式设计原则——依赖倒置原则(DIP)

DIP&#xff1a;Dependence Inversion Principle 原始定义&#xff1a;High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions。 官…