程序员

一个有趣的问题——赌场是否稳赢不陪?

2017-07-06  本文已影响190人  JBD

假设赌场拥有无限资金,赌场里面有一台抛硬币机供赌徒赌博,如果抛硬币机抛到了正面,那么赌徒赢,否则赌场赢。赌场为了防止一次性被赌徒全部赢光所有资产,限制每次赌博的金额为一元。

问题:假设赌徒只有一元钱,赌徒能进行 N 次赌博的概率为多少?

分析:
根据上述问题,我画了一个图,如下所示:

图示.png

设赌徒用 x 元开始和赌场对赌,能玩到第 y 次还能继续玩下去的可能次数为 f(x, y),对应的概率为 P(x, y)。那么我们可以得到如下公式:

f(x, y) = f(x - 1, y -1) + f(x + 1, y - 1)
P(x, y) = f(x, y) / (2 ^ x)

找到了计算公式,便可以根据计算公式编写代码进行计算了,问题解决。代码如下:

        final int count = 1000;
        BigDecimal[][] table = new BigDecimal[count][count];

        for (int i = 0; i < count; i++) {
            table[0][i] = BigDecimal.ONE;
            table[i][0] = BigDecimal.ZERO;
        }

        for (int i = 1; i < count; i++) {
            for (int j = 1; j < count - i; j++) {
                    BigDecimal num = table[i - 1][j - 1].add(table[i - 1][j + 1]);
                    table[i][j] = num;
            }
        }

        for (int i = 1; i < count - 1; i++) {
            System.out.println(table[i][1].divide(BigDecimal.valueOf(Math.pow(2, i)), 5, BigDecimal.ROUND_HALF_DOWN));
        }

最终,我模拟到了1000 次对赌的概率,为了方便展示,我把这些数据贴到了 Excel 表格制作了一张折线图。如下所示:

赌徒对赌次数概率图示

结论:
根据上图所示,我们能够十分直观的看到,随着赌博次数的增加,赌徒能继续玩下去的概率是趋向 0 % 的(代码最多模拟到了 1000 次,概率为 2.5%。因为第 N 次对赌可能结果呈现指数级增长,在 1024 次的时候,其数值超出了 double 的最大范围,使用 double 实在无法模拟下去了。)。
所以我们可以得出一个结论,如果赌场拥有无限资金,随着赌博次数的增加,赌徒还能继续玩下去的概率趋向 0%。换句话说,赌徒战胜赌场的概率几乎为 0%,赌徒输给赌场的概率几乎 100%。

如果有错误,欢迎指正!

上一篇下一篇

猜你喜欢

热点阅读