游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3088|回复: 3

[讨论] n个m面骰之和为s的几率简单求算(excel)

[复制链接]

13

主题

832

帖子

1875

积分

金牌会员

空想家

Rank: 6Rank: 6

积分
1875
发表于 2014-5-6 17:41:21 | 显示全部楼层 |阅读模式
正好需要在表里列出n个骰子结果之和为特定数的几率,百度了下,给的方法似乎都不够傻瓜。当然可能也是因为我学的概率都还给老师了,太复杂的代码也看不懂。。。
于是想了个比较傻瓜的方法来和大家讨论下。

基本思路是将所有骰子的结果全部“按规律”列出,然后一一比对是否骰子的和是目标数值。
所谓的规律如下图左侧2列,这是2个3面骰,共有3^2种情况。

2个3面骰的规律

2个3面骰的规律

发现对于第i行的情况,第n个骰子的点数可以用以下式子计算:
floor(  (i-1)  /  3^(n-1)  )   mod 3 +1

所以在这个较傻瓜的思路下可以用以下函数来求解n个m面骰子之和为s的概率:

Function n个m面骰子之和为s的几率(n As Long, m As Long, s As Long)
    t = 0
    For i = 0 To m ^ n - 1
        sumnum = 0
        For j = 0 To n - 1
            sumnum = sumnum + Int(i / m ^ j) Mod m + 1
        Next j
        If sumnum = s Then t = t + 1
    Next i
    n个m面骰子之和为s的几率 = t / m ^ n
End Function


最后想问下概率高手,是否有直接用公式解决的方案,
就是不用自定义函数,直接在excel表格里一个公式去拉所有情况的方法。






1

主题

3

帖子

27

积分

新手上路

Rank: 1

积分
27
发表于 2014-5-7 17:16:26 | 显示全部楼层
用一个公式要用数组函数
数组函数效率太慢了
既然都写出过程了,直接VBA添加一下不就行了
加一下输入值、输出添加
运行一下比下拉简单吧

13

主题

832

帖子

1875

积分

金牌会员

空想家

Rank: 6Rank: 6

积分
1875
 楼主| 发表于 2014-5-8 10:23:28 | 显示全部楼层
呃……现在就是在单元格里用以上自定义函数来拉的。
只是想了解下直接用现有公式怎么做。

13

主题

832

帖子

1875

积分

金牌会员

空想家

Rank: 6Rank: 6

积分
1875
 楼主| 发表于 2014-5-21 14:21:53 | 显示全部楼层
终于在网上找到个动态规划解法的说明,做个了不用VBA直接用公式的方式。
有兴趣的可以查看附件。

骰子直接拉.xlsx

15.56 KB, 下载次数: 213

说明看批注

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-25 08:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表