from:
实验室的峰哥近来在找工作之余经常翻看一本叫做编程之美的算法习题集. 昨天等班车时顺手拿来浏览, 看到最后一题“挖雷游戏的概率”没附答案, 却有一则脚注云“此题适合MATLAB用户解答”, 颇感有趣. 题目说, 一局16×16的扫雷游戏刚开始, 只翻开了两格, 分别显示数字1和2, 如下图所示(只画出了3×5的局部示意图). 设地雷总数从10逐渐增加到240, 请分别作出图中A, B, C三处为地雷的概率曲线.
此题适合用MATLAB解答是因为要求作出概率曲线. 如果地雷总数一定, 其实手算也很容易. 根据数字1和2的提示, 图示3×5方格中至少2个地雷, 至多3个地雷. 记 M=16×16=256 为扫雷游戏中格子总数, N 为地雷总数. 分两种情况考虑.
- 图中共2个地雷时可能的情况总数:
(M−15N−2)⋅(31)⋅(51)
.
- A处为地雷的情况总数: 0 .
- B处为地雷的情况总数: (M−15N−2)⋅1⋅(51) .
- C处为地雷的情况总数: (M−15N−2)⋅(31)⋅1 .
- 图中共3个地雷时可能的情况总数:
(M−15N−3)⋅(51)⋅(52)
.
- A处为地雷的情况总数: (M−15N−3)⋅1⋅(52) .
- B处为地雷的情况总数: 0 .
- C处为地雷的情况总数: (M−15N−3)⋅(51)⋅(41) .
要求的概率可以简单地相除得到:
P(A)P(B)P(C)=10⋅(M−15N−3)15⋅(M−15N−2)+50⋅(M−15N−3);=5⋅(M−15N−2)15⋅(M−15N−2)+50⋅(M−15N−3);=3⋅(M−15N−2)+20⋅(M−15N−3)15⋅(M−15N−2)+50⋅(M−15N−3).
注意到所求的是比值, 所以
(M−15N−2)
和
(M−15N−3)
的值并不重要, 只需知道二者之比. 可以利用
(M−15N−3)=M−N−12N−2⋅(M−15N−2)
简化计算.