出门在外,恰逢不巧,你和朋友被困住了,干点什么呢。来几局三国杀?是个不错的提议,但问题是你带牌了吗,没牌怎么打?死理性派想说的是,会玩的孩子怎么不能玩!凑几个硬币,随随便便就能玩一整天。不得不说,硬币是世界上最好的游戏机,哦,前提是你得懂点数学。

尼姆游戏

在所有二人游戏中,最古老最有魅力的就是这个尼姆游戏了(好吧,在所有二人数学游戏中)。据说它发源于中国,有时候孩子们用纸片玩,但通常人们出门可能很少带纸片,所以我们用硬币玩。

这个游戏最流行的版本是用 12 枚硬币摆成三行。

游戏规则很简单,游戏双方轮流取 1 枚或多枚硬币(只能在同一行),谁拿到最后一枚就算赢。留心的朋友玩几把就可以琢磨出,只要在自己的某一个回合里留下两行多于 1 枚且数量相同的硬币,就能确保获胜。一个优势策略是,先手的人一开始就拿掉最上面一行 2 枚硬币,这样的话,离胜利就不远了。

有趣的是,有人发现,当扩展到任意多行,每行有任意枚硬币时,利用二进制,可以把这个游戏玩得风生水起。哈佛大学的数学教授布顿在 1901 年首次发表了论文详述了这个问题,也正是他,正式将这个游戏命名为尼姆游戏。

把玩家每一步操作之后的游戏局面叫做“棋局”。在布顿的论文中,如果玩家每一步操作后的棋局能保证自己获胜,那就是“安全的”,否则就是“不安全的”。每个不安全棋局都可以一步正确的操作变成安全的,而如果没有正确地操作,一个安全的棋局就会变成不安全的。

如何判定一个棋局是安全的还是不安全的呢?这就用到了前面提到的二进制。将每一行的硬币数都用二进制表示,按矩阵元素的排列方式对齐,这时候如果每一列的数( 0 或 1 )相加都为偶数(包括 0 ),那么这个棋局就是安全的,只要有一列元素相加不为偶数,那这个棋局就是不安全的。

回到我们上面说的那个流行版本上,可以看到在初始状态,它的二进制表示如下图

可以看到,第 2 列之和为奇数,所以这个本版的初始状态是不安全的。拿掉最上面一行的 2 枚硬币,第 1 行就变成了 1 ,从而留下了一个安全棋局。通过用其他方法试验,可以看到,拿掉第 1 行的 2 枚硬币是留下安全棋局的唯一操作。

把棋局转化成上面这个二进制表格,根据表格决定怎么操作就不会出错了。但是在玩的时候,恐怕对手没那么宽容,让你不断画表格,在脑子中计算,一不小心就出错。那么记住下面这条就很有用了:在两行里留下同样多的硬币,总能赢。在此之后,让每行硬币数量保持相等就可以了。

尼姆游戏深受数学家喜爱并被广泛研究,它因此产生了很多变体。1910 年美国数学家穆尔就提出了一个,它规则与尼姆游戏相同,只不过玩家可以从不超过指定数 k 的任意多行里拿掉硬币。有趣的是,它同样可以通过二进制来分析,只要把安全棋局定义为:二进制表里的每列之和都可以被 k + 1 整除就可以了。

后选择一定赢的硬币游戏

对于粗心大意和无知的人来说,这个游戏就是一个十足的陷阱。让我们来看看这个它是怎么玩的。

抛三次硬币看最后哪一面朝上,结果无非只有这 8 种:

正正正 正正反 正反正 反正正 正反反 反正反 反反正 反反反

这个游戏的规则是,对手有优先选择权。首先对手在这 8 种组合中选一种作为他的组合,然后你选一组作为自己的组合。双方选定后,随便选一个人来连续抛硬币,直到他的或你的组合出现为止,谁的组合先出现谁就算赢。

这个游戏看上去没有什么问题,不管哪种组合,它们出现的概率都是一样的。但如果谁真这么想,那他可就输定了。事实上,先选的人一定会被针对。无论对手选择选择哪个组合,后选的人都可以选一个组合来针对他,使自己的获胜概率至少提高到 2/3 !

如果你不相信的话,就让我们选一个简单的例子来分析看看。假设对手选择的是“正正正”的组合,这时候我们只要选择“反正正”,胜率就可以瞬间到达 7/8。这是为什么呢?

如果前三次就抛出了“正正正”的结果,那对手就获胜了,这种情况发生的概率为 1/8 。但除此之外,只要最开始的三次对手没有获胜,那么我可以说,他已经没有获胜的机会了。因为前三次没有获胜,就说明在他获胜之前一定出现了反面,那第一次出现“正正正”的情况必然包含在如下的结果中:

……反正正正……

可以看到,当出现“反正正”的时候,他已经没有办法再玩下去了,因为那正是我们选择的组合,到这里我们已经获胜了。对于其他组合,这里不再专门讨论了,下面附出一张表格,给出了后选择的人采用正确策略的获胜概率,可以看到,后选择的人获胜的最低概率也是 2/3 。

你是否觉得这个结果有些出乎意料?需要说明的是,在涉及到概率时,我们的直觉很多时候都是错误的。如果你不相信,来看看死理性派的 不要相信直觉!那些概率统计的奇妙结论 是如何颠覆你对世界的认识的吧。

硬币正反不一样

通常我们所说的硬币,都是理想硬币。但由于设计的原因,硬币正反面的花纹并不一样,这就导致了它的实际重心不在正中心上。由于重心有偏向,所以掷硬币时,正反面出现的概率也会有所偏差,想要知道这个偏差具体有多大,难度颇大。幸好花纹导致的概率偏差非常非常小,可以忽略不计。

尽管如此,但万一就遇到了一个死较真的和你玩抛硬币,我们能不能找到一个方法,让真实的硬币达到理想硬币的效果呢?

答案是能。我们可以用下面这种玩法“化腐朽为神奇”:连续掷两次硬币,如果两次结果是相同的(都是正面朝上或都是反面朝上),那就重新再连续掷两次硬币,直到结果不同为止(一次反面朝上,一次正面朝上)。这时, [正,反] 的结果就可以对应掷理想硬币结果为正的情形, [反,正] 的结果就可以对应理想硬币为反的情形(反过来也可以)。

这是为什么呢?假设硬币掷出正面的概率是 p ,那掷出 [正,反] 的概率为 p( 1 - p ) ; [反,正] 的概率为 (1 - p)p。二者相等,所以采取这种方法,即便是一枚非理想硬币,游戏结果也会变成完全公平的。


参考资料

《明知其输而博赢的概率分析》

《科学美国人 趣味数学集锦之二》

超好玩硬币游戏,你都会玩吗?相关推荐

  1. Mac只能办公不能玩游戏?这十款超好玩的游戏推荐给你!

    有人说买Mac就是为了炫富,有人说买Mac只是为了办公,还有人说玩游戏就不要买Mac电脑了!那么对于那些又有办公需求又想玩游戏放松下的用户们该怎么办呢?废鱼这就推荐十款不错的Mac游戏给大家. 模拟人 ...

  2. 超好玩的硬币游戏,你会玩吗?

    出门在外,恰逢不巧,你和朋友被困住了,干点什么呢.来几局三国杀?是个不错的提议,但问题是你带牌了吗,没牌怎么打?死理性派想说的是,会玩的孩子怎么不能玩!凑几个硬币,随随便便就能玩一整天.不得不说,硬币 ...

  3. Pygame实战:Python做一款超好玩的滑雪大冒险小游戏,超会玩【附源码】

    导语 ​冬日当然要和心爱的人一起去滑雪, 徜徉在雪白的世界, 浪漫又刺激!唯有爱和滑雪不可辜负! 不但风景绝美,而且还超!会!玩! 现在还不是时候 但秋天已过半动冬天还会远吗? 既然不能现在去滑雪,但 ...

  4. 好玩的java战旗游戏_这6款可玩性高的战棋类游戏你喜欢玩吗?快get起来!

    战棋类游戏属于策略类角色扮演游戏,俗话说就走格打仗,这类游戏有战略性强,可玩性高等特点深受广大玩家喜爱,下面小编就为大家介绍几款经典的战棋类游戏. 1.风色幻想系列:提到战棋类游戏风色幻想系列可以说是 ...

  5. Created with Cocos丨超好玩的人气 2D/3D 游戏大合集,根本停不下来!

    午休时间到-游戏时间开启!今天 C 姐来为大家推荐一波使用 Cocos Creator 开发的精彩游戏,包括原生.小游戏.H5 等,涵盖多个游戏品类,既有游戏厂商的诚意之作.也有独立开发者的创意巧思, ...

  6. 超经典超好玩的光枪游戏,强烈推荐!

    死亡之屋2&3合集,死亡之屋:过度杀戮,幽灵小队,生化危机暗黑编年史.生化危机安布雷拉历代记,死亡空间:撤离,林克的弓箭训练!都是超经典超好玩的光枪游戏,强烈推荐! null 转载于:http ...

  7. Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

    题目描述: 大家应该都会玩"锤子剪刀布"的游戏:现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入描述: 输入第1行给出正整数N(< ...

  8. 2021超级好玩的VR游戏推荐,玩了还想玩

    VR给我们带来了身临其境的体验,让我们过足了游戏瘾.玩了很多vr游戏,我把个人觉得最好玩的推荐给大家,一起来交流. 1. 阿斯加德之怒(Asgards Wrath) <阿斯加德之怒>是一款 ...

  9. 2kB也能做出好玩的游戏?别惊讶,你一定玩过

    3A游戏大作层出不穷,这些游戏画面精美.特效逼真.打斗精彩,这些优点都建立在庞大的游戏体积和高要求的硬件配置上. 国产3A大作<黑神话悟空> <量子破碎>.<GTA5&g ...

最新文章

  1. Ubuntu下安装Stanford CoreNLP
  2. python换零钱有多少种方案_Python3算法实例 1.2:动态规划 之 换零钱
  3. iPhone用户状告App厂商手脚不干净,偷窥我电脑剪切板干什么
  4. 阿里巴巴发送短信接口的使用
  5. linux边看系统信息,Linux查看系统信息大全[备忘]
  6. 五位专家跟你讲讲为啥Python更适合做AI/机器学习
  7. C语言printf 和 scanf 用法
  8. 【华为云技术分享】【昇腾】【玩转Atlas200DK系列】基于Pycharm专业版构建开发板python开发运行环境
  9. 安装Android SDK时,点击SDK Manager.exe闪退,并且jdk的环境变量是对的。
  10. 【中山市选2009】【BZOJ2463】谁能赢呢?
  11. 汇川AM系列Modbus通信设置
  12. 科普知识------世界洋流[地球上有哪些洋流]
  13. D. Aerodynamic(思维+计算几何判中心对称图形)
  14. 嵌入式监控【v4l2采集->vpu编码->live555推流】
  15. 【mac 实现ai绘画自由安装指南】
  16. 最新域名升级是什么?
  17. 四书《孟子》《论语》《中庸》《大学》五经《风》《雅》《颂》全文
  18. UnityShader初级篇——渐变纹理
  19. Java在上传或下载时header中Content-Disposition的作用以及Content-disposition中Attachment和inline的区别
  20. 【资源分享】疫情居家一个月,精心整理了一个PPT资源社区(含模板-资源-高级技巧)

热门文章

  1. 3槽Thunderbolt(雷电)PCIe扩展坞 EB3T
  2. 创建等距世界:游戏开发入门
  3. Ubuntu文件权限设置
  4. 计算机工具栏变宽怎么还原,win7工具栏变宽了怎么办_win7工具栏大小调整方法-win7之家...
  5. 计算机教育的改革论文,学校计算机改革下的计算机教育论文
  6. 玩银河麒麟操作系统终端,忆国外unix主机上偶遇隔壁同胞
  7. python编译程序输入上网时间并计算上网费用 计算方法_同济大学Python程序设计基础 实验三:选择结构...
  8. 计算机毕业设计-ssm+vue汽车销售管理系统-汽车商城(前后端分离)java代码
  9. developerWorks Java技术:十周年
  10. 直播页面6:直播中的弹幕_烈焰弹幕使