趣题:用 26 次机会找出任意一张对方想要的牌

本贴最后更新于 3270 天前,其中的信息可能已经事过境迁

看守打算和 A 、 B 两名囚犯做一个游戏。首先,看守从一副牌中取出大小王,将剩余的 52 张牌洗好,并在桌子上从左至右地把它们摆成一排,每张牌都是正面朝上。然后,看守让囚犯 A 来到桌前,允许囚犯 A 观察牌面,并交换其中两张牌的位置。接着,看守将囚犯 A 关回牢房,把所有牌全都翻到背面朝上(但位置不变),让囚犯 B 来到桌前。看守随便报出一张牌的花色和点数(比如“梅花 3”),要求囚犯 B 找出这张牌。囚犯 B 每次可以翻开任意一张尚未翻开的牌,但一共只有 26 次机会。如果囚犯 B 在这 26 次机会之内找到了看守想要的牌,则两名囚犯赢得游戏,无罪释放;如果囚犯 B 翻开了 26 张牌之后,还没找到看守想要的牌,则两名囚犯输掉游戏,立即死刑。在整个游戏开始之前,两名囚犯可以商量一个策略;游戏开始后,两人就不能有任何其他形式的交流。果不其然,这又是一个关满了数学天才的监狱。两名囚犯碰头后,很快就商量出了一种必胜的策略。这种必胜的策略是什么?


































两名囚犯可以约定一种用 1 到 52 给扑克牌进行编号的方案。于是,桌上的扑克牌就相当于是写有 1 到 52 的卡片形成的一个排列了。假设现在所有的牌都是背面朝上的。想一想,如果你翻开某张牌,看看牌上写的是几,然后就去翻左起第几张牌,并不断地这样做下去,最后的结果是什么?最后的结果是,你迟早会回到出发点。假如你翻开了左起第 5 张牌,牌上写的是 34 ;你又翻开了左起第 34 张牌,结果牌上写的是 18 ;你又翻开了左起第 18 张牌,结果牌上写的是 13 ……总有一个时候,你会翻到一张写着 5 的牌,于是你就回到了出发点,得到了一个“圈”。这个圈并不一定涵盖了桌上的所有牌,换句话说,这个圈的长度并不一定是 52 。那么,再随便翻开一张尚未涉及到的牌,并不断根据牌上的信息翻开下一张牌,最终又会得到一个新的圈……也就是说,不管桌上的扑克牌是怎样排列的,它都可以被分解成若干个这样的圈。

所以,倘若看守想要的牌的编号是 15 ,那么囚犯 B 就可以翻开左起第 15 张牌,然后让牌上的数指引他继续往下翻牌。只要 15 所在的圈的长度小于等于 26 ,囚犯 B 就能在 26 步之内翻到写有 15 的牌,从而赢得游戏。而囚犯 A 的任务就是,想办法交换其中两张牌,让任何一张牌所在的圈的长度都不超过 26 。这确实是总能办到的。如果左起第 a1 张牌上写有 a2 ,左起第 a2 张牌上写有 a3 ,以此类推,一直到左起第 an 张牌上写有 a1 ,那么交换左起第 a1 张牌和左起第 ak 张牌,结果会怎么样呢?注意到,左起第 a1 张牌上现在写的就是 ak+1 了,左起第 ak 张牌上现在写的就是 a2 了。于是,这个长度为 n 的圈会被打断成长度分别为 n – k + 1 和 k – 1 的两个小圈:

左起第 a1 张牌上写有 ak+1
左起第 ak+1 张牌上写有 ak+2
…… ……
左起第 an-1 张牌上写有 an
左起第 an 张牌上写有 a1
左起第 ak 张牌上写有 a2
左起第 a2 张牌上写有 a3
…… ……
左起第 ak-2 张牌上写有 ak-1
左起第 ak-1 张牌上写有 ak
1 到 52 的排列中,长度超过 26 的圈最多只能有 1 个。适当选择 k 的值,便能把它变成两个长度均小于等于 26 的小圈。这样,囚犯 B 便能保证在 26 次之内找到看守想要的牌,两人也就必胜了。

https://www.reddit.com/r/math/comments/44h3tu/interesting_puzzle_from_msri_newsletter_prisoners/

  • 囚犯
    1 引用 • 2 回帖
  • 1 引用 • 2 回帖
  • 极客
    3 引用 • 33 回帖 • 1 关注
  • 算法
    435 引用 • 254 回帖 • 24 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • xcatliu via macOS

    干嘛把答案也贴出来,至少也要积分悬赏吧

  • 其他回帖
  • zempty

    楼主精力真旺盛,佩服佩服~🙏

推荐标签 标签

  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • Outlook
    1 引用 • 5 回帖 • 2 关注
  • Anytype
    3 引用 • 31 回帖 • 15 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • Word
    13 引用 • 40 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    133 引用 • 900 回帖 • 1 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 678 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖 • 2 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 443 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1742 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    169 引用 • 1527 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 612 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 6 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 28 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 176 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 4 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 88 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 702 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 1 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 740 关注
  • sts
    2 引用 • 2 回帖 • 223 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 806 关注