Classic Brain Teasers

经典智力题高频题库

一页读完高频智力题母题:题面讲清楚,答案讲透,推理从第一原则展开, 每道题都配一个可播放的交互演示。

28 道经典题 覆盖概率、编码、调度、构造、公共知识
12 类母题 按题型筛选,先学套路再看变体
137 个演示帧 每道题都能逐步播放和回看
阅读契约

本页回答一个问题:高频智力题如何从题面转成可验证的模型、约束和不变量。读完后,你应该能先判断题型,再选择计数、调度、概率、构造或反例验证路线。

经典智力题解题方法手绘图:模型、不变量、计数、调度、验证和边界情况
智力题不是靠灵感跳答案,而是先把题面翻译成模型,再用不变量、容量、时序和边界情况压缩搜索空间。
澄清约束

先确认是否单轮、是否可自适应、是否恰好一个答案、是否允许混合或重复操作。

找第一原则

把题目翻译成容量、奇偶、不变量、递推、状态图或样本空间,而不是背固定答案。

证明最优

给出下限、构造和排除反例;只给步骤而不证明,面试里很容易被追问击穿。

讲出变体

最后改一个约束,说明答案怎样变化,证明你理解的是母题结构。

当前显示 28 道题。

Problem Set

题库索引

IQ001 毒酒验鼠:1000 瓶毒酒与 10 只老鼠 最少 10 只老鼠;10 个死活结果组成毒酒瓶号的二进制编码。 编码类 · 常见 IQ002 暗桥传灯:四人带一支火把过桥的最短时间 最短时间是 17 分钟:1 和 2 过,1 回,5 和 10 过,2 回,1 和 2 再过。 调度类 · 常见 IQ003 囚灯计数:100 名囚犯随机进房与一盏灯泡 指定 1 名计数员;其余 99 人每人只在第一次有机会时发送一次开灯信号,计数员收满 99 次后宣布。 信号类 · 常见 IQ004 黑帽沉默:三人三黑两白的公共知识推理 实际三人都戴黑帽时,第一轮沉默排除“两人戴白”,第二轮沉默排除“一人戴白”;所以第三轮三人都能确定自己是黑帽。 公共知识类 · 入门 IQ005 换门取车:主持人开出羊门后要不要换 换门;不换赢 13\frac{1}{3},换门赢 23\frac{2}{3} 概率类 · 入门 IQ006 天平辨球:12 个球三次称重找出异常球 可以做到;用三次自适应称重,可以唯一找出异常球并判断它偏重还是偏轻。 信息论类 · 困难 IQ007 鸡蛋试楼:两枚鸡蛋找 100 层安全线 最坏情况最少 14 次;按 14、13、12、... 的递减间隔试楼。 信息论类 · 常见 IQ008 海盗分金:五名海盗如何投票分 100 枚金币 A 可提出 A98、B0、C1、D0、E1;A、C、E 共 3 票通过。 逆推类 · 困难 IQ009 燃绳计时:两根不均匀绳子量出 45 分钟 第一根两端同时点燃,第二根只点一端;30 分钟后第一根烧完,立刻点燃第二根另一端,再等 15 分钟。 构造类 · 入门 IQ010 水桶取量:用 3 升桶和 5 升桶精确量出 4 升 用 5 升桶先制造 2 升余量,再让 3 升桶只缺 1 升;满的 5 升桶补出这 1 升后,5 升桶正好剩 4 升。 构造类 · 入门 IQ011 开关探灯:三个开关一次进门找灯 先开 A 等待,关 A 后开 B 再进门:亮是 B,灭但热是 A,灭且冷是 C。 构造类 · 入门 IQ012 百门开合:100 扇门经过 100 轮倍数切换后哪些还开着 最后开着的是完全平方数门:1、4、9、16、25、36、49、64、81、100。 不变量类 · 入门 IQ013 赛马选优:25 匹马无秒表找最快 3 匹 最少 7 场:5 场分组赛、1 场冠军赛、1 场候选赛。 调度类 · 进阶 IQ014 抽盒循迹:100 名囚犯按置换循环找号码 按盒内号码沿置换循环开盒;全员成功当且仅当没有长度超过 50 的循环,概率约 31.18%31.18\% 概率类 · 困难 IQ015 蓝眼离岛:公开宣布怎样让沉默变成证据 若有 c 个蓝眼人,他们会在第 c 天清晨一起离岛。 公共知识类 · 困难 IQ016 狼羊渡河:农夫带狼羊菜安全过河 7 次过河:羊去、农夫空回、狼去、羊回、菜去、农夫空回、羊去。 构造类 · 入门 IQ017 野人渡河:三名传教士与三名野人安全过河 最短需要 11 次摆渡:CC 去、C 回、CC 去、C 回、MM 去、MC 回、MM 去、C 回、CC 去、C 回、CC 去。 构造类 · 进阶 IQ018 帽色校验:100 人排队报帽色的奇偶策略 最多保证 99 人正确:最后一人可能错,其余 99 人可保证正确。 编码类 · 进阶 IQ019 蚂蚁换身:木棍上同速蚂蚁碰头掉头的掉落时间 碰头掉头等价于互相穿过并交换身份。若木棍长 L、速度 v、位置为 x_i,最早全落时间是 maxmin(xi,Lxi)/vmax min(x_i, L-x_i)/v,最晚全落时间是 maxmax(xi,Lxi)/vmax max(x_i, L-x_i)/v 不变量类 · 入门 IQ020 睡莲倍增:每天翻倍的池塘何时半满 第 29 天。因为第 30 天满池,而满池的前一天必定是半池。 递推类 · 入门 IQ021 金条付款:七天工资最少切几刀 最少切 2 刀,把金条分成 1、2、4 三块。 编码类 · 入门 IQ022 真假问路:两扇门与真假守卫 任选一名守卫问:如果我问另一名守卫哪扇门安全,他会指哪扇?然后选择他所指门的相反门。 逻辑类 · 入门 IQ023 生日相撞:23 人同生日概率为何过半 23 人时,至少两人生日相同的概率约为 50.73%50.73\%,已经超过一半。 概率类 · 入门 IQ024 子女性别:两个孩子的条件概率陷阱 在男/女等可能且互不影响的标准假设下,“至少一个是男孩”为 13\frac{1}{3};“较大的是男孩”为 12\frac{1}{2} 概率类 · 进阶 IQ025 约瑟夫环:每隔一人淘汰后谁幸存 每次淘汰第 2 人时,若 n=2m+ln=2^m+l,幸存位置是 2l+12l+1;100 人答案是 73。 递推类 · 进阶 IQ026 取石异或:三堆 Nim 石子游戏必胜策略 异或和为 0 是必败态;非 0 时一步改成 0。 博弈类 · 进阶 IQ027 黑白不变:缺角棋盘能否铺满骨牌 不能铺满,因为剩下的黑白格数量不相等,而每张骨牌都必须同时覆盖一黑一白。 不变量类 · 入门 IQ028 信封悖论:双信封换不换的期望陷阱 无额外信息时换不换是对称的;看到金额 x 后,必须知道金额生成规则或先验,才能判断另一个信封的条件期望。 概率类 · 困难

IQ001 · 编码类

毒酒验鼠:1000 瓶毒酒与 10 只老鼠

常见
答案 最少 10 只老鼠;10 个死活结果组成毒酒瓶号的二进制编码。

题面

有 1000 瓶外观完全相同的酒,其中恰好 1 瓶有毒。毒发时间固定为 24 小时:只要老鼠喝到那瓶毒酒的样本,24 小时后一定死亡;没有喝到毒酒就一定存活。

你只有一次测试窗口。也就是说,所有喂食安排都必须现在一次性设计好,不能等看到部分结果后再补测。每只老鼠可以喝很多瓶酒各取一小滴混在一起的样本。

24 小时后,你只能看到每只老鼠是死还是活。要求无论哪一瓶有毒,都能根据这组死活结果唯一指出毒酒。问最少需要几只老鼠。

第一原则

一只老鼠本质上是在回答一个是或否的问题:毒酒是否在我喝过的那一组瓶子里?m 只老鼠最后最多给出 2m2^m 种死活模式。要从 1000 个可能答案中保证选出 1 个,模式数至少要覆盖 1000;9 只老鼠只有 512 种,不够,10 只老鼠有 1024 种,才有可能。接下来只要把每瓶酒分配到一个唯一的 10 位编码即可。

详细解法

  1. 先证明下限:如果只有 9 只老鼠,最终只有 29=5122^9=512 种死活模式,但毒酒可能是 1000 瓶中的任意一瓶。至少有两个瓶号会落到同一种模式里,所以 9 只无法保证区分。
  2. 再证明 10 只够用:把 1000 瓶酒编号为 0 到 999。10 位二进制一共有 210=10242^10=1024 个标签,足够给每瓶酒分配一个互不相同的标签。
  3. 把每个瓶号写成 10 位二进制,不足 10 位就在左边补 0。例如 613 号瓶写成 1001100101,因为 613=512+64+32+4+1613=512+64+32+4+1
  4. 让第 i 只老鼠负责第 i 个二进制位:凡是这一位为 1 的瓶子,都取一滴给这只老鼠喝;这一位为 0 的瓶子,就不给这只老鼠喝。
  5. 为什么这样能解码?因为只有 1 瓶有毒。第 i 只老鼠会死,恰好说明毒酒瓶号的第 i 位是 1;第 i 只老鼠活着,恰好说明那一位是 0。
  6. 24 小时后,把死记为 1,把活记为 0,按老鼠对应的位顺序排成 10 位二进制数。这个数对应的编号,就是唯一可能的毒酒编号。
  7. 所以 9 只老鼠不够,10 只老鼠有明确构造,最少数量就是 10 只。

常见误区

  • 不要把一只老鼠理解成只能测一瓶。标准解法依赖“混合取样”:同一只老鼠可以喝很多瓶各一滴。
  • 不要把 10 只老鼠看成 10 次独立试验。这里所有安排必须在同一轮开始前设计好,最后一次性读取 10 个死活信号。
  • 每瓶酒必须有唯一编码。如果两个瓶子被安排给完全相同的一组老鼠,它们产生的死亡模式就一样,结果无法区分。
  • 从 0 编号还是从 1 编号不影响本质。关键是喂食时使用的编码表,必须和最后解码时使用的编码表完全一致。
  • 这个结论依赖题目条件:恰好 1 瓶有毒,且毒发结果确定。如果可能有多瓶毒酒或毒发时间不稳定,就不是同一道题了。

变体

  • 如果瓶数是 n,单轮最少老鼠数是满足 2mn2^m \ge n 的最小 m,也就是向上取整的 log2 n。
  • 如果还要区分“没有毒酒”这一种可能,就要覆盖 n+1n+1 种结果,因为全都存活也必须代表一个明确答案。
  • 如果总时间允许两轮,且第二轮可以在第一轮观察后再安排,单只老鼠可能表现为第一轮死、第二轮死、一直活 3 种状态,可改成三进制编码。
  • 如果题目额外限制每只老鼠只能喝一瓶,二进制分组就不能用,所需老鼠数会完全不同。

IQ002 · 调度类

暗桥传灯:四人带一支火把过桥的最短时间

常见
答案 最短时间是 17 分钟:1 和 2 过,1 回,5 和 10 过,2 回,1 和 2 再过。

题面

有四个人在夜里要从左岸过到右岸。他们各自单独过桥所需时间分别是 1、2、5、10 分钟。桥很窄,每次最多只能有两个人在桥上,也可以只有一个人过桥。

桥上没有灯,唯一的光源是一支火把。任何一次过桥或返回,都必须有人亲手带着火把;火把不能扔过去,不能隔空传递,也不能自己回来。

如果两个人一起走,速度由较慢的人决定。例如 5 分钟的人和 10 分钟的人一起过桥,这次耗时是 10 分钟,而不是 15 分钟。

开始时四个人和火把都在左岸。目标是让四个人最终都在右岸,并且总耗时尽可能短。问最少需要多少分钟。

第一原则

这题的核心不是“谁最快就让谁一直跑”,而是先看必须付出的成本。10 分钟的人一定要过桥一次,5 分钟的人也一定要过桥一次;同时,火把还必须被带回来给左岸剩下的人使用。因为返回也要花时间,最优安排要同时考虑“谁把最慢两人送过去”和“谁把火把带回来”。对四个人 abcda\le b\le c\le d 来说,只需要比较两种有竞争力的模板:让 c 和 d 一起过,或让最快的 a 分别护送 c、d 过。

详细解法

  1. 先把四个人按时间从快到慢记为 a、b、c、d。本题中 a=1a=1b=2b=2c=5c=5d=10d=10
  2. 最慢的 c 和 d 迟早都要到右岸。它们如果分开过,就至少要分别付出 c 和 d 的时间;它们如果一起过,只需要付出 d 的时间,因为两人同行按较慢者计时。
  3. 但是 c 和 d 一起过桥之前,右岸必须有人能把火把带回来,否则左岸剩下的人无法继续行动。最便宜的返回者应该从最快的 a 和 b 中选择,而不是让 5 或 10 分钟的人回来。
  4. 第一种模板是“两个最快的人做接力”:a+ba+b 先过,a 回来,c+dc+d 一起过,b 回来。这样 c 和 d 已经在右岸,火把又回到左岸,成本是 b+a+d+bb+a+d+b,也就是 a+2b+da+2b+d
  5. 第二种模板是“最快的人 a 来回护送”:a+da+d 过,a 回来,a+ca+c 过,a 回来。这样 c 和 d 也在右岸,火把也回到左岸,成本是 d+a+c+ad+a+c+a,也就是 2a+c+d2a+c+d
  6. 代入 1、2、5、10:第一种模板成本是 2+1+10+2=152+1+10+2=15;第二种模板成本是 10+1+5+1=1710+1+5+1=17。先处理最慢两人时,第一种更省。
  7. 执行第一种模板后,左岸只剩 1 和 2,并且火把在左岸。最后让 1 和 2 一起过桥,耗时 2 分钟。
  8. 完整时间线是:1 和 2 过桥用 2 分钟,1 返回用 1 分钟,5 和 10 过桥用 10 分钟,2 返回用 2 分钟,1 和 2 再过桥用 2 分钟。总计 2+1+10+2+2=172+1+10+2+2=17 分钟。
  9. 为什么这已经是最优?四个人至少需要三次向右过桥和两次带火把返回;最慢两人要么一起过,要么分开过。上面两种模板正好覆盖这两种有竞争力的情况,并且每次返回都选最快可用的人,所以没有更低成本的安排。

常见误区

  • 不要只把向右过桥的时间相加。10、5、2 看起来能凑出 17,但这种算法漏掉了必须带火把返回的时间。
  • 不要机械地让 1 分钟的人每次都回来。方案 1+101+10 过、1 回、1+51+5 过、1 回、1+21+2 过的总时间是 19 分钟,比最优方案慢。
  • 不要把两个人同行的耗时算成两人时间之和。5 和 10 一起走只花 10 分钟,因为他们并排走,较快的人必须等较慢的人。
  • 不要让火把瞬移、投掷或由无人带回。题目的限制是每次移动火把都必须有人实际过桥。
  • “最多两个人”不是“必须两个人”。返回时通常只有一个人带火把回来,这完全符合题意。
  • 不要只凭直觉选当前看起来最快的一步。局部最快不一定整体最快,因为每次返回都会影响后面谁能继续过桥。

变体

  • 若四个人时间为 abcda\le b\le c\le d,四人版最短时间是 min(a+3b+d,2a+b+c+d)min(a+3b+d, 2a+b+c+d)。本题分别是 17 和 19,所以答案取 17。
  • 人数更多时,通常每轮处理当前最慢的两个人,并在 a+ba+b 接力与 a 单人护送两种模板之间比较,再递归处理剩下的人。
  • 如果桥能同时承载三个人,或有两支火把,或火把可以不用人带回,约束已经改变,原来的 17 分钟结论不再适用。
  • 如果过桥时间换成 1、10、11、12,最快者来回护送反而可能更划算。这说明模板比较比固定背答案更可靠。

IQ003 · 信号类

囚灯计数:100 名囚犯随机进房与一盏灯泡

常见
答案 指定 1 名计数员;其余 99 人每人只在第一次有机会时发送一次开灯信号,计数员收满 99 次后宣布。

题面

100 名囚犯被关在彼此隔离的牢房里。每天,狱卒随机挑选其中 1 人进入一间特殊房间。房间里只有一盏灯,灯只有亮和灭两种状态;本版本约定开始时灯是灭的。

进入房间的人可以看见灯当前是亮还是灭,也可以选择把灯打开、关掉,或者什么都不做。离开房间后,他不能告诉别人自己看见了什么,也不能留下纸条、划痕等其他记号。

所有囚犯只允许在游戏开始前共同商量一套策略。游戏开始后,他们被随机叫进房间,顺序不可预测,同一个人可能连续被叫到,某些人也可能很久都没有机会。

任意一名囚犯在自己进房时都可以宣布:“所有 100 人都至少进过这间房一次。”如果宣布正确,100 人全员获救;如果宣布错误,策略失败。目标是在公平的随机访问会长期给每个人机会的前提下,最终能正确宣布,并且绝不误报。

第一原则

第一性原理是:灯泡本身只能存 1 个比特,也就是“亮/灭”这一个可见状态。它记不住是谁来过,也记不住来过多少人,所以不能让大家随便开关。可靠做法是把灯当成一只一次只能装一封信的信箱:非计数员只负责投递“我来过”这封信一次,计数员只负责取信并计数。随机访问只会影响取信和投信等待多久,不会改变“每封信最多来自一个新人、每封信最终会被计数员取走”的逻辑。

详细解法

  1. 先选定 1 人做计数员,例如 P0。计数员自己一开始就知道“我本人已经至少进过一次”的时刻:只要 P0 第一次被叫进房间,他就满足这一点。因此他需要确认的只剩另外 99 人。
  2. 其余 99 人都是发送者。每个发送者心里只保存一个私人状态:我有没有发送过自己的信号。开始时每个人都记为“未发送”。
  3. 发送者的规则很简单:如果他还未发送,并且这次进房看到灯是灭的,就把灯打开,然后把自己记为“已发送”。如果灯已经亮着,说明信箱里已有别人的信,他不能覆盖;如果自己已经发送过,以后无论看到什么都不再开灯。
  4. 计数员的规则也很简单:每次进房如果看到灯亮,就把灯关掉,并把自己的计数加 1;如果看到灯灭,就什么都不做。
  5. 为什么计数不会重复?因为一个发送者一生只会把灯从灭改成亮一次。计数员每次看到亮灯,只能说明有某个尚未发送过的人在他上次关灯之后投递了一次信号。
  6. 为什么计数不会漏掉已经发送的信号?因为灯一旦被某个发送者打开,就会一直亮着,直到计数员来把它关掉。其他人看到亮灯也不动它,所以这封信不会被擦掉或混淆。
  7. 当计数员数到 99 时,已经收到 99 个互不重复的发送者信号。发送信号的前提是那个人本人进过房间,所以另外 99 人都来过;计数员本人当然也来过,因为宣布发生在他某次进房时。因此这时宣布一定正确。
  8. 随机访问为什么不破坏可靠性?随机顺序可能让灯长时间亮着、也可能让某个新人很晚才遇到灭灯,但它不会制造假信号。在每天独立随机选择的经典模型下,每个人会一再获得机会的概率为 1;计数员也会反复回来清空信箱。因此等待时间不可预知,但最终收满 99 个信号的概率为 1。

常见误区

  • 不要让所有人都在第一次进房时开灯。若灯本来就亮着,后来的新人无法留下自己的信号,计数员也分不清这盏灯代表谁。
  • 不要让非计数员重复开灯。重复开灯会把“同一个人来过很多次”误当成“很多不同的人来过”。
  • 不要让非计数员关灯。关灯是计数员的取信动作;发送者随手关灯会抹掉别人还没被计数的信号。
  • 不要在计数到 98 时宣布。计数员本人已经来过,但他仍需要确认另外 99 名非计数员都至少来过一次。
  • 不要把“随机”理解成“固定天数内一定完成”。这个策略保证不误报;在公平随机过程下最终会完成,但没有可提前承诺的截止日期。
  • 不要忽略初始灯状态。本解法把初始灯灭作为题面条件;如果初始状态未知,需要先处理这个额外不确定性。

变体

  • 如果初始灯状态未知,可以让同一套角色继续使用,但计数员要把目标提高到 100:每名非计数员都需要发送两次信号,计数员在第二轮的 99 个信号收齐后再宣布,从而吸收最初那盏可能已经亮着的灯。
  • 如果不是随机选择,而是由狱卒安排顺序,只要满足公平性,也就是不会永远漏掉某个仍需要机会的人,这个一次性信号策略仍然不会误报并会最终成功。
  • 如果有两盏灯,或者房间里允许留下更多状态,可以设计更快的编码协议;但核心仍是先规定谁写入、谁读取、每个状态代表什么。
  • 如果要求给出确定的最多天数,单靠随机访问做不到。狱卒完全可能很久不叫某个人,策略只能保证正确性和长期随机模型下的最终成功。

IQ004 · 公共知识类

黑帽沉默:三人三黑两白的公共知识推理

入门
答案 实际三人都戴黑帽时,第一轮沉默排除“两人戴白”,第二轮沉默排除“一人戴白”;所以第三轮三人都能确定自己是黑帽。

题面

桌上共有 3 顶黑帽、2 顶白帽。主持人给 A、B、C 三个人各戴一顶帽子,剩下两顶收起来。每个人都能看见另外两个人的帽子颜色,但永远看不见自己的帽子颜色。

所有人都知道这些规则:黑帽总共 3 顶,白帽总共 2 顶;每个人都只会在能够确定时才回答;大家都足够理性;并且大家也知道别人同样知道这些规则。这种“所有人都知道,且知道别人也知道”的条件叫公共知识。

主持人一轮一轮地问:现在有谁能确定自己帽子的颜色?如果没人回答,就进入下一轮。经典情形是 A、B、C 实际都戴黑帽。为什么他们只凭别人的帽子和连续沉默,最后都能确定自己是黑帽?

第一原则

这题的关键不是“我看见了什么”,而是“如果某种情况是真的,别人此刻应该会看见什么、知道什么、说什么”。每一轮沉默都会变成所有人共同听到的新信息,从而排除一批可能情况。

详细解法

  1. 先从最简单的情况想起:如果某人看到另外两人都是白帽,他会立刻知道自己是黑帽。理由很朴素:白帽总共只有 2 顶,已经都在别人头上了,自己的帽子不可能再是白帽。
  2. 第一轮没人回答,因此所有人都同时知道:没有任何人看见“两顶白帽”。如果真的有两个人戴白帽,第三个戴黑帽的人就会看见两白并立刻回答。既然没有人回答,“两人戴白”的情况被排除。
  3. 接着看“一人戴白”的假设。假设 A 是白帽,B、C 是黑帽。那么 B 会看见 A 白、C 黑。B 会想:如果我也是白帽,C 就会看见两顶白帽,C 第一轮就该回答;但第一轮 C 没回答,所以我不是白帽,我是黑帽。C 也会做同样推理。
  4. 所以在“一人戴白”的世界里,两个黑帽人会在第二轮知道自己是黑帽并回答。换句话说,第二轮如果仍然没人回答,就说明“一人戴白”的情况也不可能。
  5. 真实情形中 A、B、C 都看见另外两人是黑帽。第一轮沉默后,他们只排除了“两白”;第二轮沉默后,他们又排除了“一白”。剩下唯一可能就是“三人全黑”,所以第三轮三个人可以同时回答:我是黑帽。
  6. 这个推理依赖公共知识:不只是 A 知道 B 理性,还要 A 知道 B 会用第一轮沉默推理,B 也知道 A 会这样想。沉默之所以有力量,正是因为每个人都能把同一段沉默当成共同证据。

常见误区

  • 不要说“我只看见两顶黑帽,所以自己可能黑也可能白,永远不能知道”。这忽略了别人没有回答这件事。
  • 不要把“第一轮没人答”直接理解成“全黑”。第一轮只能排除“两白”,还不能排除“一白”。
  • 不要把私人信息和公共信息混在一起。A 看见 B、C 的帽子只是 A 的私人视角;主持人问完后大家都听见沉默,这才是共同可用的信息。
  • 不要省略公共知识条件。如果有人不理性、没听见问题、或不知道别人也会推理,那么沉默就不能可靠地排除情况。

变体

  • 如果实际只有 1 个白帽、2 个黑帽,那么两个黑帽人会在第二轮回答;戴白帽的人通常不能在同一时刻立刻确定自己颜色。
  • 如果实际有 2 个白帽、1 个黑帽,那么那个黑帽人第一轮就会回答,因为他直接看见两顶白帽。
  • 如果有 n 个黑帽人都看见别人是黑帽,推理会变成同样的等待链:较少白帽的可能情况会被一轮一轮排除。
  • 蓝眼岛民题是同一种公共知识归纳,只是帽子换成眼睛颜色,轮次换成天数,沉默换成没人离岛。

IQ005 · 概率类

换门取车:主持人开出羊门后要不要换

入门
答案 换门;不换赢 13\frac{1}{3},换门赢 23\frac{2}{3}

题面

三扇关闭的门后面放着一辆车和两只羊。车的位置是随机的;你不知道车在哪,只能先选一扇门。

主持人知道每扇门后面是什么。他必须打开一扇你没有选的门,而且这扇门后面一定是羊,不能打开车,也不能打开你选的门。

主持人打开一扇羊门后,场上还剩两扇没开的门:你原来选的门,以及另一扇门。主持人总会给你一次机会:坚持原选择,还是换到另一扇门。

在这些规则都成立时,你应该换门吗?坚持不换和选择换门,各自赢车的概率是多少?

第一原则

第一次选择已经把概率分成两块:你选中的那扇门有 13\frac{1}{3} 概率有车,另外两扇门合起来有 23\frac{2}{3} 概率有车。主持人知道答案,并且必定从“另外两扇门”里排除一扇羊门,所以那 23\frac{2}{3} 不会平均消失,而是转移到剩下那扇未开的门上。

详细解法

  1. 先看第一次选择。三扇门只有一扇有车,所以第一次就选中车的概率是 13\frac{1}{3};第一次选到羊的概率是 23\frac{2}{3}
  2. 如果你第一次选中车,主持人只能从另外两扇羊门里打开一扇。此时你若换门,就会从车换到羊,所以换门会输。
  3. 如果你第一次选到羊,另外两扇门里必定是一辆车和一只羊。主持人不能开车,也不能开你的门,所以他只能打开那只羊。
  4. 在第一次选到羊的情况下,主持人打开羊门后,剩下那扇未打开、且不是你原选择的门必定是车,所以换门一定赢。
  5. 因此,“换门赢”与“第一次选错”是同一件事,概率是 23\frac{2}{3}
  6. “不换赢”只发生在第一次就选中车的时候,概率是 13\frac{1}{3}
  7. 看起来开门后只剩两扇门,但这两扇门不是重新随机洗牌出来的;其中一扇保留了你最初选择的 13\frac{1}{3},另一扇承接了最初未选区域的 23\frac{2}{3}

常见误区

  • 不要把“剩两扇门”直接理解成“各 12\frac{1}{2}”。概率是否相等,取决于这两扇门是怎样被留下来的。
  • 主持人不是普通观众。他知道车在哪,并且被规则限制:必须开一扇未选的羊门。这个动作带着信息。
  • 不要忽略“主持人总会给你换门机会”。如果他只在某些情况下才让你换,概率就会改变。
  • 如果主持人不知道答案、可能随机开到车,或者可以选择不开门,这些都是别的题,不能直接套用 23\frac{2}{3}
  • 换门不是因为主持人“暗示”了哪扇门有车,而是因为你第一次选错的 23\frac{2}{3} 概率被保留下来了。

变体

  • 100 扇门版本更直观:你先选 1 扇,只有 1%1\% 概率直接选中车;其他 99 扇门合起来有 99%99\% 概率藏着车。主持人打开其中 98 扇羊门后,剩下那扇门承接了这 99%99\%
  • 如果主持人不知道答案并随机开门,甚至可能开出车,那就必须重新计算;这时“看到他刚好开出羊门”本身也是一个条件。
  • 如果主持人知道答案,但只有在你先选中车时才故意邀请你换门,那么换门反而会变差。主持人的固定规则必须写清楚。
  • 如果主持人打开多扇羊门,思路不变:先分清最初选中的概率,再看主持人的规则如何筛掉不可能的门。

IQ006 · 信息论类

天平辨球:12 个球三次称重找出异常球

困难
答案 可以做到;用三次自适应称重,可以唯一找出异常球并判断它偏重还是偏轻。

题面

有 12 个外观完全相同的球,其中恰好 1 个球重量异常。其他 11 个球重量完全相同;异常球可能比正常球重,也可能比正常球轻,开始时你不知道是哪一种。

你只有一架左右天平。每次称重时,可以在左盘和右盘各放同样数量的球,天平只会给出三种结果之一:左盘重、右盘重、平衡。它不会告诉你具体重了多少。

最多只能称 3 次。每一次称什么,可以根据前面已经看到的结果来决定。最后必须同时回答两个问题:哪一个球异常,以及它是偏重还是偏轻。

第一原则

一个“可能答案”不是单独的球号,而是“某球偏重”或“某球偏轻”。12 个球共有 24 种可能答案。一次天平称重像一个三选一问题:结果可能是左重、右重、平衡;三次最多形成 33=273^3=27 条结果路径,所以信息容量够用。但 33243^3\ge 24 只说明“叶子数量可能够”,还没有给出称法。真正要做的是构造一棵决策树:每次称重都把当前候选的“球号+方向”尽量分成三组,并保证走到第三次后,每一种结果都能对应唯一答案。

详细解法

  1. 先给 12 个球编号为 1 到 12。第一次称 1、2、3、4 对 5、6、7、8。
  2. 如果第一次平衡,说明 1 到 8 全部正常,异常球只可能在 9、10、11、12 中。第二次称 9、10、11 对 1、2、3,其中 1、2、3 已经是正常参照。
  3. 在平衡分支里,如果第二次也平衡,异常球就是 12。第三次称 12 对 1:12 重就是 12 偏重,12 轻就是 12 偏轻。
  4. 在平衡分支里,如果第二次左重,异常球只能是 9、10、11 中的某一个偏重。第三次称 9 对 10:哪边重就是哪个球偏重;若平衡,就是 11 偏重。
  5. 在平衡分支里,如果第二次右重,异常球只能是 9、10、11 中的某一个偏轻。第三次称 9 对 10:哪边轻就是哪个球偏轻;若平衡,就是 11 偏轻。
  6. 如果第一次左重,不能说 1 到 4 都“可疑为重”这么简单;准确候选是 1 重、2 重、3 重、4 重、5 轻、6 轻、7 轻、8 轻。此时 9 到 12 都是正常球。
  7. 第一次左重时,第二次称 1、2、5 对 3、6、9。若第二次左重,候选只剩 1 重、2 重、6 轻;第三次称 1 对 2,哪边重就是哪个球偏重,若平衡就是 6 偏轻。
  8. 第一次左重时,若第二次右重,候选只剩 3 重、5 轻;第三次称 3 对 9,若 3 比正常球重就是 3 偏重,若平衡就是 5 偏轻。
  9. 第一次左重时,若第二次平衡,候选只剩 4 重、7 轻、8 轻;第三次称 7 对 8,若平衡就是 4 偏重,哪边轻就是哪个球偏轻。
  10. 如果第一次右重,做同一套交叉称重,方向全部镜像:第二次仍称 1、2、5 对 3、6、9。
  11. 第一次右重时,若第二次右重,候选是 1 轻、2 轻、6 重;第三次称 1 对 2,哪边轻就是哪个球偏轻,若平衡就是 6 偏重。
  12. 第一次右重时,若第二次左重,候选是 3 轻、5 重;第三次称 3 对 9,若 3 比正常球轻就是 3 偏轻,若平衡就是 5 偏重。
  13. 第一次右重时,若第二次平衡,候选是 4 轻、7 重、8 重;第三次称 7 对 8,若平衡就是 4 偏轻,哪边重就是哪个球偏重。
  14. 至此,第一次的三种结果、第二次的三种结果、第三次的判定都被覆盖。每条真实路径最后只留下一个“球号+偏重/偏轻”答案,所以三次称重足够。

常见误区

  • 不要把 33243^3\ge 24 当成完整答案。它只是容量检查;没有具体称法,就不能保证这些结果路径真的能对应 24 种可能。
  • 不要只记录球号。第一次左重时,1 可能偏重,但 5 可能偏轻;“1 可疑”和“5 可疑”背后的方向完全不同。
  • 不要以为天平左重就表示左盘里每个球都可能偏重。右盘里某个球偏轻,也会让左盘看起来更重。
  • 第一次平衡后,所有上过称的 1 到 8 都可以当正常参照使用;第一次不平衡后,没上称的 9 到 12 反而是正常参照。
  • 有些最终称重的第三种结果在题目条件下不会发生,这不是漏洞。因为前面的结果已经把候选缩小了,不可能的路径可以空着。
  • 答案必须同时说出球号和方向。只说“异常球是 12”还不够,必须再判断它是偏重还是偏轻。

变体

  • 如果已知异常球一定更重,9 个球两次称重就能解决。
  • 如果有一个额外的已知正常球作参照,三次称重可以处理更多候选;已知正常参照会让最后的轻重判断更容易。
  • 如果把 12 改成 13,并且仍要求在三次内同时判断偏重或偏轻,单纯数 262726\le 27 会误导人;原题这种没有额外正常球的设置下,三次保证解的经典上限是 12。
  • 如果只要求找出异常球号、不要求判断偏重还是偏轻,题目会变简单,因为每个球不再拆成“偏重”和“偏轻”两个状态。
  • 如果可能有两个异常球,或者异常球的轻重幅度不一致,这棵决策树就不适用,需要重新建模可能状态。

IQ007 · 信息论类

鸡蛋试楼:两枚鸡蛋找 100 层安全线

常见
答案 最坏情况最少 14 次;按 14、13、12、... 的递减间隔试楼。

题面

有一栋 100 层楼,楼层编号为 1 到 100。你有 2 枚完全相同的鸡蛋,可以从任意楼层往下扔。

存在一个未知的最高安全楼层 F。只要从 F 层或更低楼层扔,鸡蛋一定不会碎;只要从 F+1F+1 层或更高楼层扔,鸡蛋一定会碎。F 可能是 0,表示 1 楼也会碎;F 也可能是 100,表示 100 楼也安全。

鸡蛋碎了就不能再用;没有碎的鸡蛋可以继续使用。每次扔完之后,你都可以根据碎或没碎的结果决定下一次扔哪一层。

目标不是碰巧很快找到答案,而是设计一种保证策略:无论真实的 F 是多少,都能确定 F。问在最坏情况下,最少需要扔多少次。

第一原则

这题的关键资源不是楼层,而是鸡蛋。用普通二分时,如果第一枚蛋在 50 楼碎了,剩下 1 枚蛋就不能再跳着试 25 楼、37 楼,因为它再碎就没有信息来源了;只能从 1 楼往上逐层查,最坏会把总次数拖到 50 次。两枚鸡蛋的最优策略要先选一个最坏次数上限 x,然后让每一次“当前一扔 + 碎后逐层回查”都刚好不超过 x。第一次最多跳 x 层,第二次最多再跳 x1x-1 层,第三次最多再跳 x2x-2 层,于是覆盖能力是 x+(x1)++1x+(x-1)+\ldots +1

详细解法

  1. 先理解只有 1 枚鸡蛋时会发生什么。假设你已经知道 L 层安全、U 层会碎,而答案 F 在 L 到 U 之间。只剩 1 枚蛋时,不能跳过中间楼层;如果直接从较高楼层扔且碎了,被跳过的楼层就再也无法区分。因此只能从 L+1L+1L+2L+2L+3L+3 这样逐层往上试。
  2. 所以第一枚蛋的作用,是把 100 层切成若干小段。一旦第一枚蛋在某一站碎了,第二枚蛋就在上一站和这一站之间逐层查完。
  3. 为什么不是二分?二分的第一步会试 50 楼。如果 50 楼碎了,只剩 1 枚蛋,要区分 F=0F=0、1、2、...、49,只能从 1 楼逐层试到 49 楼。最坏总次数是 1+49=501+49=50 次,远远不是最优。
  4. 现在假设我们希望最坏不超过 x 次。第一次如果从第 x 层扔并且碎了,下面最多有 x1x-1 层需要用第二枚蛋逐层查,总次数正好不超过 x。
  5. 如果第 x 层没碎,已经用掉 1 次,还剩 x1x-1 次。下一跳就不能再跳 x 层,只能跳 x1x-1 层;否则第二次碎了以后,中间楼层会多到查不完。
  6. 同理,第三跳最多再上 x2x-2 层,第四跳最多再上 x3x-3 层。每安全一次,剩余次数少 1,所以下一段长度也必须少 1。
  7. 因此 x 次最多能覆盖 x+(x1)+(x2)++1x+(x-1)+(x-2)+\ldots +1 层,也就是 x(x+1)/2x(x+1)/2 层。这个式子不是公式魔法,而是在数每一次第一枚蛋碎掉时,第二枚蛋还能线性回查的最大段长。
  8. 比较 100 层需要的最小 x:13 次最多覆盖 13×142=9113\times \frac{14}{2}=91 层,不够;14 次最多覆盖 14×152=10514\times \frac{15}{2}=105 层,足够覆盖 100 层。
  9. 实际策略是从 14 楼开始,然后按递减间隔走:14、27、39、50、60、69、77、84、90、95、99、100。只要第一枚蛋在某一站碎了,就用第二枚蛋从上一站的下一层开始逐层试。
  10. 例如 27 楼碎了,就已经知道 14 楼安全、27 楼会碎,只需查 15 到 26 共 12 层。此时已经扔了 2 次,还剩 12 次,刚好够。
  11. 无论第一枚蛋在哪一站碎,还是一路到 100 楼都不碎,总次数都不会超过 14。又因为 13 次最多只能覆盖 91 层,所以最坏情况最少就是 14 次。

常见误区

  • 不要把二分法当成最优。二分适合每次测试都可重复使用的普通真假问题;这里一次碎蛋会永久减少资源,导致碎蛋分支只能线性查。
  • 不要忘记 F 可以是 0 或 100。策略必须覆盖“1 楼也会碎”和“100 楼也不会碎”这两个边界情况。
  • 不要只追求平均次数。题目问的是最坏情况最少,所以必须保护每一条可能分支,而不是只让常见分支看起来快。
  • 不要用固定间隔,例如每 10 层试一次。越往后已经用掉的次数越多,如果仍然留下同样大的回查区间,最坏情况会超出预算。
  • 不要在只剩 1 枚蛋时继续大步跳。它如果再碎,答案会落在被跳过的楼层里,无法确定。
  • 14 不是因为接近 100 的平方根。真正原因是 14+13++1=10514+13+\ldots +1=105,刚好是能覆盖 100 层的最小递减总量。

变体

  • 如果楼层数变成 n,仍然只有 2 枚鸡蛋,就找最小 x 使 x(x+1)/2nx(x+1)/2 \ge n,然后按 x、x1x-1x2x-2、... 的间隔试。
  • 如果只有 1 枚鸡蛋,最坏情况只能从 1 楼逐层试到 100 楼,最多 100 次。
  • 如果鸡蛋足够多或测试器不会坏,普通二分才重新适用;100 层的安全线大约 7 次就能定位,因为每次都可以放心继续折半。
  • 如果有 3 枚或更多鸡蛋,最优覆盖数不再只是三角数,通常用动态规划计算:一次测试碎了少 1 枚蛋,没碎则少 1 次机会。
  • 如果目标改成平均次数最少,并且已知 F 的概率分布,最佳策略可能不同;本题只讨论没有概率信息时的最坏情况保证。

IQ008 · 逆推类

海盗分金:五名海盗如何投票分 100 枚金币

困难
答案 A 可提出 A98、B0、C1、D0、E1;A、C、E 共 3 票通过。

题面

5 名海盗要分 100 枚金币。按资历从高到低编号为 A、B、C、D、E,A 最老,E 最年轻。金币不能切开,每个人拿到的数量必须是整数。

每一轮都由当前还活着、资历最高的海盗提出分配方案,然后所有活着的海盗一起投票,提案者本人也投票。

若赞成票达到活着人数的一半或以上,方案立刻通过;否则提案者被扔下海,下一位资历最高的海盗继续提案。

所有海盗完全理性,比较顺序是:先保命,再尽量多拿金币;如果自己是否活着和金币数都一样,就倾向于让当前提案者死。问 A 第一轮应怎样分,才能让自己拿到最多金币并通过投票。

第一原则

这是逆向归纳:不要先猜 5 人局,而是从最后只剩 1 人时的确定结果开始,逐层往前推。n 人局的通过门槛是 ceil(n2)ceil(\frac{n}{2}) 票,也就是人数的一半向上取整,且提案者会投自己赞成票;其他人只会比较“接受当前方案能拿多少”和“让提案者死后下一轮自己能拿多少”。因为平局时会让提案者死,所以收买一票必须给对方严格多于下一轮收益。

详细解法

  1. 先算投票门槛。2 人局需要 1 票,3 人局需要 2 票,4 人局需要 2 票,5 人局需要 3 票。这里的票数包含提案者自己的赞成票。
  2. 1 人局只剩 E,没有投票博弈,E 会拿走全部 100 枚金币。
  3. 2 人局是 D、E。门槛是 1 票,D 自己赞成就够,因此 D 可以提 D100、E0。E 反对也无法阻止方案通过。
  4. 3 人局是 C、D、E。C 需要 2 票,自己已有 1 票,还要再买 1 票。若 C 死,下一轮 D 会拿 100,E 会拿 0;所以 D 已经不可能拿得更多,E 只要拿到 1 就比下一轮的 0 好。C 提 C99、D0、E1。
  5. 4 人局是 B、C、D、E。B 需要 2 票,自己已有 1 票,还要再买 1 票。若 B 死,上一段告诉我们 C99、D0、E1;D 的下一轮收益是 0,所以给 D 1 枚就能让 D 赞成。B 提 B99、C0、D1、E0。
  6. 5 人局是 A、B、C、D、E。A 需要 3 票,自己已有 1 票,还要再买 2 票。若 A 死,下一轮是 B99、C0、D1、E0。
  7. 因此 C 和 E 的拒绝价最低:他们下一轮都是 0,各给 1 就会赞成。D 下一轮能拿 1,必须给 2 才会赞成;B 下一轮能拿 99,必须给 100 才会赞成,而 A 还需要另一票。A 当然选最便宜的 C 和 E。
  8. 最终 A 提 A98、B0、C1、D0、E1。A 自己赞成,C 和 E 因为 1>01>0 也赞成,正好 3 票达到 5 人局门槛,方案通过。

常见误区

  • 不要按“公平”或“平均分”思考。海盗只比较自己的生死和金币数,不关心方案是否看起来公平。
  • 不要漏掉提案者自己的票。半数及以上意味着 2 人局只需要 1 票,所以 D 自投就能通过。
  • 不要把“半数及以上”误读成“必须超过半数”。4 人局只需要 2 票,不需要 3 票。
  • 不要用相同金币数收买别人。题目说收益相同会让提案者死,所以当前方案必须让对方严格多拿。
  • 不要让每个海盗都和 A 的方案直接比较。每个人比较的是:A 死后下一轮自己会拿多少。
  • 不要买 D 的票时只给 1 枚。D 在 B 的方案里已经能拿 1,给 1 只是打平,D 会反对。

变体

  • 如果规则改成必须超过半数,2 人局不再是提案者一票通过,整条倒推链都会改变。
  • 如果海盗在金币相同时不偏好杀死提案者,平局也可能投赞成,很多 1 枚金币的收买会变成 0 枚。
  • 如果金币可以无限细分,最小收买单位不再是 1 枚,而是比下一轮收益多一点点。
  • 如果提案者本人不能投票,或投票门槛不包含提案者,门槛要重新计算,答案也会改变。
  • 如果海盗人数或金币数变化,方法不变:先倒推下一轮收益,再用最小代价买够当前门槛。

IQ009 · 构造类

燃绳计时:两根不均匀绳子量出 45 分钟

入门
答案 第一根两端同时点燃,第二根只点一端;30 分钟后第一根烧完,立刻点燃第二根另一端,再等 15 分钟。

题面

桌上有两根可以燃烧的绳子。每根绳子从任意一端单独点燃,从点火到完全烧完都正好需要 60 分钟。

绳子的粗细、材料或湿度可能沿途不同,所以燃烧速度不均匀。某一半长度可能烧 5 分钟,另一半长度可能烧 55 分钟;题目没有给你任何刻度或均匀性。

你有足够的火柴,可以在任意时刻点燃任意一根绳子的任意一端。绳子一旦烧完就会完全消失,不能重复使用。

在不能量长度、不能剪绳子、不能假设中点的前提下,怎样精确量出 45 分钟?

第一原则

这题的关键不是“长度”,而是“剩余单端燃烧时间”。一根绳子从一端单独烧完需要 60 分钟,说明整根绳子含有 60 分钟的可燃时间量。速度不均匀只会影响火焰在真实长度上的位置,不会改变整根的总时间量。两端同时点燃时,左端火焰每过 1 分钟吃掉 1 分钟的单端时间量,右端火焰也每过 1 分钟吃掉 1 分钟的单端时间量;两个火焰合起来每分钟消耗 2 分钟的时间量,所以 60 分钟的总量会在 30 分钟内消耗完。

详细解法

  1. 把两根绳子分别叫 A 和 B。开始计时时,同时点燃 A 的两端,并点燃 B 的一端。
  2. 先看 A。A 原本从单端烧完要 60 分钟。现在它的两端都在烧,两个火头共同消耗这 60 分钟的时间量,因此 A 会在 30 分钟后烧完。这里不需要知道火头在绳子上的物理位置。
  3. A 烧完的瞬间,就是从开始起过去了 30 分钟。此时 B 只从一端烧了 30 分钟。因为 B 单端总共要 60 分钟,所以如果让它继续只从这一端烧,还需要 30 分钟才能烧完。
  4. 立刻点燃 B 的另一端。现在 B 剩下的不是“半根长度”,而是“30 分钟的单端燃烧时间量”。两端一起烧会以两倍速度消耗这段剩余时间量。
  5. 所以 B 剩下的 30 分钟时间量会在 15 分钟内烧完。开始后的 30 分钟加上这 15 分钟,正好是 45 分钟。
  6. 因此做法是:A 两端点、B 一端点;A 烧完时点燃 B 的另一端;B 烧完时停止计时。

常见误区

  • 不要把“烧掉一半长度”当成 30 分钟。题目明确燃烧不均匀,所以长度比例没有时间意义。
  • 不要等 B 烧到看起来像一半再操作。你无法从外观判断剩余时间,只能利用 A 烧完这个可靠的 30 分钟信号。
  • 不要误以为两端点燃要求两边速度相同。两边火焰可以快慢不同,它们只是在共同消耗同一段剩余时间量,最后相遇的位置未必在几何中点。
  • 不要说“第一根烧完后,第二根还剩半根”。正确说法是:第二根还剩 30 分钟的单端燃烧时间量。

变体

  • 只用一根 60 分钟绳子,两端同时点燃,可以直接量出 30 分钟。
  • 如果有三根 60 分钟绳子,可以把 30 分钟、15 分钟等片段继续组合,构造出更多 15 分钟倍数的计时方案。
  • 如果每根绳子的总燃烧时间不是 60 分钟,思路仍然相同:先把“单端总时间”当作可燃时间量,再用两端点燃把某段剩余时间量减半。
  • 如果题目不保证每根绳子从任意单端点燃都需要同样的总时间,就不能直接使用这个经典解法;需要额外条件来确认两端的总时间量。

IQ010 · 构造类

水桶取量:用 3 升桶和 5 升桶精确量出 4 升

入门
答案 用 5 升桶先制造 2 升余量,再让 3 升桶只缺 1 升;满的 5 升桶补出这 1 升后,5 升桶正好剩 4 升。

题面

你有两个空桶:一个最多装 3 升,一个最多装 5 升。两个桶都没有刻度,所以你看不出“半桶”“大约 4 升”这样的中间水量。

水源无限。每一步只允许三种可靠操作:把某个桶装满,把某个桶倒空,或者把一个桶倒进另一个桶,直到倒水的桶空了,或接水的桶满了。

目标是得到精确的 4 升水。因为 3 升桶装不下 4 升,所以最后这 4 升必须留在 5 升桶里。问怎样操作,并说明为什么每一步的水量都是确定的。

第一原则

没有刻度时,精确性来自“边界”,不是来自眼力。装满能得到 3 或 5,倒空能得到 0,从一个桶倒到另一个桶会停在两个可靠边界之一:源桶空,或目标桶满。把状态写成 (3 升桶水量, 5 升桶水量),每次合法操作都会把一个确定状态变成另一个确定状态。这个题的关键是先用 535-3 得到精确的 2 升,再把这 2 升放进 3 升桶,使 3 升桶只剩 1 升空间;随后满的 5 升桶只需要倒出这 1 升,就必然留下 4 升。

详细解法

  1. 先约定状态写法:(x,y) 表示 3 升桶里有 x 升,5 升桶里有 y 升。开始两个桶都是空的,所以状态是 (0,0)。
  2. 把 5 升桶装满,状态从 (0,0) 变成 (0,5)。这一步可靠,因为“装满 5 升桶”直接给出精确 5 升。
  3. 把 5 升桶倒入 3 升桶,直到 3 升桶满。3 升桶从 0 到 3,需要接走 3 升,所以 5 升桶从 5 剩到 2,状态变成 (3,2)。
  4. 把 3 升桶倒空,状态变成 (0,2)。注意这一步保留了 5 升桶里的 2 升,不要把 5 升桶倒掉。
  5. 把 5 升桶里的 2 升倒进 3 升桶,状态变成 (2,0)。现在 3 升桶里精确有 2 升,因此它距离装满还差 1 升。
  6. 再次把 5 升桶装满,状态变成 (2,5)。此时 5 升桶有 5 升,3 升桶只缺 1 升。
  7. 把 5 升桶倒入 3 升桶,直到 3 升桶满。因为 3 升桶只差 1 升,所以这次只能从 5 升桶倒出 1 升;5 升桶从 5 减到 4,最终状态是 (3,4)。
  8. 最后的 4 升为什么留在 5 升桶里?因为这一步的停止条件是“3 升桶满”,而 3 升桶在倒水前只缺 1 升。倒水一旦补满这 1 升就必须停止,所以满的 5 升桶只失去 1 升,剩下的 51=45-1=4 升仍在 5 升桶中。

常见误区

  • 不要凭感觉倒到“差不多 4 升”。没有刻度时,只有装满、倒空、倒到一边触达边界才是精确操作。
  • 不要在倒水过程中随意停止。标准规则要求一直倒到源桶空或目标桶满,不能凭观察中途喊停。
  • 不要在得到 (3,2) 后倒掉 5 升桶里的 2 升。那 2 升是后面制造“只缺 1 升空间”的关键。
  • 不要把状态顺序看反。这里始终用 (3 升桶, 5 升桶),所以 (3,4) 表示 5 升桶里有 4 升。
  • 不要以为目标水量必须是唯一剩下的水。题目只要求量出 4 升;到达 (3,4) 时,5 升桶已经精确含有 4 升。如果还想只留下这 4 升,可以再把 3 升桶倒空。

变体

  • 同一题也可以从 3 升桶开始:先用两次 3 升去填 5 升,得到 1 升余量,再把 1 升转移到 5 升桶并加满一个 3 升桶,最后也能得到 4 升。
  • 两个桶容量为 a 和 b 时,能精确量出的目标量必须是 gcd(a,b) 的倍数,并且不能超过较大桶容量。3 和 5 的最大公约数是 1,所以 1 到 5 升中的整数目标都有可能构造出来。
  • 若要求最少步数,可以把每个状态 (x,y) 当作图节点,把装满、倒空、互倒当作边,再用 BFS 搜索最短路径。
  • 如果桶上有刻度,问题会简单很多;如果不允许倒空或不允许从水源装满,状态图的边会变少,答案可能改变。

IQ011 · 构造类

开关探灯:三个开关一次进门找灯

入门
答案 先开 A 等待,关 A 后开 B 再进门:亮是 B,灭但热是 A,灭且冷是 C。

题面

房间外并排有 3 个开关,记为 A、B、C。房间里面只有 1 盏灯,而且 3 个开关中恰好只有 1 个开关控制这盏灯。

门关着的时候,你完全看不到房间里的灯。你可以站在门外随意拨动开关,也可以等待一段时间;但一旦打开门进房间,就不能再回到门外继续试开关,也不能再拨动开关。

灯一开始是灭的。题目默认这是一只传统灯泡:它亮过一段时间后会变热,关掉后也会在短时间内保留余热,并且你进屋时可以安全地摸到或感受到它的温度。

问题是:只进房间一次,怎样确定 A、B、C 中到底哪一个开关控制这盏灯?

第一原则

如果只看灯现在亮不亮,一次进门只能分出两种结果:亮或灭,不够区分三个开关。关键是把时间也用起来:让某个开关提前打开一段时间,灯泡如果真的被它控制,就会把“刚才亮过”记录成热量。这样进门时能读到三种状态:正在亮、灭但热、灭且冷。亮表示当前被打开的开关有效;灭但热表示先前打开过又关掉的开关有效;灭且冷表示前两个都无效,只能是剩下的开关。

详细解法

  1. 先把三个开关命名为 A、B、C。名字本身不重要,只是为了让步骤说得清楚。
  2. 打开开关 A,等待几分钟。等待的作用不是为了观察,因为你还在门外看不到灯;它的作用是让灯泡在 A 真正控制它时积累热量。
  3. 等待后,把 A 关掉。此时如果 A 是正确开关,灯已经不亮了,但灯泡还会留下余热;如果 A 不是正确开关,灯泡从头到尾没有被 A 点亮,也不会因为 A 变热。
  4. 接着打开开关 B,并且立刻进房间。这里要“立刻”,因为 B 的信息是当前状态:如果 B 控制灯,进门时灯应该正在亮。
  5. 进屋后先看灯是否亮。灯亮,说明当前打开的 B 正在给灯供电,所以控制开关是 B。
  6. 如果灯不亮,再判断灯泡是否热。灯灭但热,说明它刚才亮过,现在又被关掉了;这正好对应“先打开、后关掉”的 A,所以控制开关是 A。
  7. 如果灯不亮而且灯泡是冷的,说明 A 没有让它亮过,B 也没有让它现在亮起来。题目说三者中恰好有一个控制灯,因此剩下的 C 就是答案。
  8. 这道题的本质是给三个开关安排三种可区分的观察结果:A 对应“过去亮过,留下热”;B 对应“现在正在亮”;C 对应“过去没亮,现在也没亮”。一次进门不是只读一个亮灭信号,而是同时读当前亮灭和过去热量两个线索。

常见误区

  • 不要只轮流开一下三个开关。门外看不到灯,进门后也不能继续试,所以必须在进门前把信息写进灯泡状态。
  • 不要忘记等待。A 必须开足够久,才可能留下可以分辨的热量;只开一瞬间通常无法可靠判断。
  • 关掉 A 以后不要拖太久才进门。余热会慢慢散掉,拖太久会把“灭但热”的线索变成“灭且冷”。
  • 不要把 B 也提前关掉。如果进门时 B 是关的,就失去了“灯正在亮”这一种结果。
  • 这题默认灯泡会明显发热,并且可以安全判断温度。如果换成几乎不发热的 LED,或规定只能看不能摸,标准解法就不成立。
  • 结论依赖“恰好一个开关控制这盏灯”。如果可能没有开关控制灯,或多个开关共同控制灯,就要重新分析。

变体

  • 如果是 3 个开关分别控制 3 盏灯,也可以用同样方法:让 A 开一会儿再关,进门前打开 B。每盏灯按亮、灭但热、灭且冷三类状态分别配对。
  • 如果只能看不能摸,观察结果只剩亮和灭两种,无法一次区分三个开关;除非题目额外提供别的可见痕迹。
  • 如果灯泡是 LED 或节能灯,现实中可能不够热。面试题通常默认传统白炽灯,或者明确允许通过温度判断。
  • 如果允许多次进门,问题会简单很多:可以一次试一个开关。经典版本的难点正是把多次试验压缩成一次进门。
  • 如果开关数量更多,单靠亮、灭但热、灭且冷这三种粗略状态通常不够。要区分更多可能,就需要更多可稳定读取的状态,或者放宽进门次数。

IQ012 · 不变量类

百门开合:100 扇门经过 100 轮倍数切换后哪些还开着

入门
答案 最后开着的是完全平方数门:1、4、9、16、25、36、49、64、81、100。

题面

走廊上有 100 扇门,编号为 1 到 100。开始时,每一扇门都是关着的。

接下来做 100 轮操作。第 1 轮切换每一扇门;第 2 轮只切换编号是 2 的倍数的门;第 3 轮只切换编号是 3 的倍数的门;一直这样继续。

这里的“切换”意思是:原来关着就打开,原来开着就关上。第 k 轮会切换所有编号能被 k 整除的门,也就是 k、2k、3k、... 这些门。

完成第 100 轮之后,哪些编号的门仍然开着?请不要只给模拟结果,还要说明为什么这些门一定开着、其他门一定关着。

第一原则

一扇门的最终状态只取决于它被切换了奇数次还是偶数次。编号为 n 的门,会在第 k 轮被切换,当且仅当 k 是 n 的约数。因此问题变成:哪些数有奇数个约数?约数通常按 a×b=na\times b=n 成对出现,只有完全平方数会多出一个无法配成两份的平方根约数,所以只有完全平方数有奇数个约数。

详细解法

  1. 先只看一扇门,例如 n 号门。它什么时候会被碰到?第 k 轮切换 k 的倍数门,所以 n 号门会被切换,正好等价于 n 是 k 的倍数,也等价于 k 能整除 n。
  2. 因此,n 号门被切换的次数,等于 n 的约数个数。比如 12 号门会在第 1、2、3、4、6、12 轮被切换,因为这些数都能整除 12。
  3. 再看切换次数和最终状态的关系。门最初是关闭的:切换 1 次会打开,切换 2 次会回到关闭,切换 3 次又打开。偶数次会互相抵消,奇数次会留下打开状态。
  4. 所以我们只需要判断:n 的约数个数是奇数还是偶数。
  5. 约数为什么会成对?如果 a 是 n 的约数,那么“n 除以 a”也是 n 的约数,并且 a×(na\times (n 除以 a)=na)=n。例如 40 的约数可以配成 1×401\times 402×202\times 204×104\times 105×85\times 8,每一对贡献 2 个约数。
  6. 如果 n 不是完全平方数,每个约数 a 都会配到另一个不同的约数“n 除以 a”。所有约数都两两成对,所以约数总数是偶数,门最后关闭。
  7. 如果 n 是完全平方数,例如 36=6×636=6\times 6,约数 6 的搭档还是 6 自己。计数时 6 只能算一次,不会贡献一对不同约数,于是其他约数成对,再加上这个落单的平方根约数,总数就是奇数。
  8. 因此,最后开着的门正好是 100 以内的完全平方数:121^2222^2323^2、...、10210^2,也就是 1、4、9、16、25、36、49、64、81、100。

常见误区

  • 不要把“第 k 轮切换 k 的倍数”误读成“第 k 轮只切换第 k 扇门”。第 10 轮会切换 10、20、30、...、100。
  • 不要以为最后开着的是奇数门。9 号门开着是因为它有 1、3、9 三个约数;11 号门虽然是奇数,但只有 1 和 11 两个约数,最后会关着。
  • 不要忘记“切换”不是“打开”。如果一扇门已经开着,再被切换一次就会关上。
  • 不要把约数对中的平方根算两次。36 的 6×66\times 6 只对应约数 6 一个数,这正是平方数有奇数个约数的原因。
  • 1 也是完全平方数,因为 1=121=1^2。它只在第 1 轮被切换一次,所以最后开着。
  • 100 也要包括在内,因为 102=10010^2=100,并且它在 100 扇门的范围内。

变体

  • 如果有 N 扇门并做 N 轮同样操作,最后开着的是所有不超过 N 的平方数门。也就是 121^2222^2、...,一直列到仍然不超过 N 的最大平方数。
  • 如果有 1000 个柜子,同理最后开着的是 121^231231^2,因为 312=96131^2=961,而 322=102432^2=1024 已经超过 1000。
  • 如果门一开始全是打开的,结论会反过来:平方数门会被切换奇数次而变关,非平方数门会被切换偶数次而保持开。
  • 如果规则改成第 k 轮只切换“恰好编号为 k 的门”,或改成切换别的集合,就不能直接套用约数配对;必须重新建立“哪些轮会碰到同一扇门”的模型。

IQ013 · 调度类

赛马选优:25 匹马无秒表找最快 3 匹

进阶
答案 最少 7 场:5 场分组赛、1 场冠军赛、1 场候选赛。

题面

有 25 匹马和 5 条赛道。每场比赛最多只能让 5 匹马一起跑,比赛结束后只知道这 5 匹马在本场里的第 1 名、第 2 名、第 3 名……没有秒表,也没有具体用时。

没有秒表的意思是:如果两匹马没有在同一场里直接比过,或者不能通过共同对手推出快慢,就不能凭感觉跨场比较。例如 A 组第 2 名不一定比 B 组第 2 名快。

假设每匹马速度稳定,同一匹马和同一批对手再跑,快慢关系不会变。问最少需要跑几场,才能保证确定 25 匹马中最快的 3 匹。

第一原则

没有秒表时,一场比赛只告诉我们参赛马之间的相对顺序。解题的第一原则是:如果已经能指出至少 3 匹马一定比某匹马快,那匹马就不可能进入全局前三。前 5 场先给每组内部排序,第 6 场比较五个组冠军,再用“至少 3 匹已知更快”的规则淘汰不可能者。剩下的马正好是所有仍可能成为第 2 或第 3 名的候选,最后一场把它们直接排出来。

详细解法

  1. 先把 25 匹马任意分成 A、B、C、D、E 五组,每组 5 匹。每组跑 1 场,5 场之后得到组内顺序,例如 A1>A2>A3>A4>A5A1>A2>A3>A4>A5B1>B2>B3>B4>B5B1>B2>B3>B4>B5
  2. 这 5 场是必要的:如果某匹马一次都没跑过,它完全可能是最快的马,我们就不可能保证找出前三。5 条赛道一次最多覆盖 5 匹马,所以至少要 5 场才能让 25 匹马都进入比较网络。
  3. 第 6 场让五个组冠军 A1、B1、C1、D1、E1 比赛。为了叙述方便,假设结果是 A1>B1>C1>D1>E1A1>B1>C1>D1>E1。其他冠军顺序只是换个组名,推理完全一样。
  4. 现在 A1 一定是全局第 1。原因很直接:A1 在 A 组赢过 A2 到 A5,又在冠军赛赢过 B1、C1、D1、E1;而其他组内的马又都输给各自冠军,所以没有任何马能比 A1 快。
  5. 接着淘汰不可能进前三的马。D1 已经输给 A1、B1、C1,D 组其他马又输给 D1,所以 D 组全体至少被 3 匹马压住;E 组同理更不可能进前三。
  6. C 组里,C1 只确定输给 A1、B1,所以它还可能是第 3;但 C2 输给 C1,同时也被 A1、B1 压住,已经有 3 匹已知更快,C2 到 C5 都淘汰。
  7. B 组里,B1 只确定输给 A1,可能是第 2;B2 确定输给 B1 和 A1,仍可能是第 3;B3 输给 B1、B2,再加上 A1,至少 3 匹更快,所以 B3 到 B5 淘汰。
  8. A 组里,A2 可能是第 2,A3 可能是第 3;A4 已经输给 A1、A2、A3,至少 3 匹更快,所以 A4、A5 淘汰。
  9. 因此,除已确定第 1 的 A1 之外,仍可能成为全局第 2 或第 3 的马正好是 A2、A3、B1、B2、C1。这不是随便挑的 5 匹,而是所有没有被“至少 3 匹已知更快”排除的马。它们也确实都还可能:A2、B1 可能争第 2;A3、B2、C1 都可能在某种符合前 6 场结果的速度关系里成为第 3。
  10. 第 7 场让 A2、A3、B1、B2、C1 同场比赛。它们中的第 1 名就是全局第 2,因为 A1 已经确定第 1;它们中的第 2 名就是全局第 3,因为其他所有马都已被证明不可能进前三。
  11. 为什么 6 场还不够?如果总共只跑 6 场,那么前 5 场必须让 25 匹马各跑一次,否则没跑过的马仍可能是最快;于是前 5 场只能形成 5 个小组,第 6 场又必须比较 5 个小组冠军来确定第 1。冠军赛之后,A2 可能比 B1 快,也可能比 B1 慢;A3、B2、C1 之间也有一些跨组关系未知。存在多个都符合前 6 场结果的世界,所以必须再跑一场把这些候选直接比较清楚。于是最少 7 场,且 7 场方案已经给出。

常见误区

  • 不要把不同组的同名次直接比较。A2 和 B2 都是小组第 2,但它们没有直接比赛,也没有足够的共同关系推出谁更快。
  • A1 已经确定是全局第 1,不需要参加最后一场。最后一场要解决的是第 2 和第 3,不是重新找第 1。
  • 淘汰一匹马时,要能说出至少 3 匹确定比它快。只说“它所在组的冠军不强”不够严谨。
  • C1 虽然输给 A1 和 B1,但仍可能是第 3;C2 则不同,因为 C2 还输给 C1,所以已经有 A1、B1、C1 三匹确定比它快。
  • B2 不能被淘汰,因为目前只知道 A1 和 B1 比它快。只要没有找到第 3 匹确定更快的马,它就仍可能排进前三。
  • 第 7 场只需要 5 匹候选参加,刚好不超过 5 条赛道。把更多已经淘汰的马加进来没有帮助,也不符合“最少场次”的目标。

变体

  • 如果只找最快的 1 匹,前 5 场分组赛加 1 场冠军赛就够,一共 6 场。
  • 如果有秒表,每场都能记录具体时间,问题会简单很多:让所有马至少跑一次后按时间排序即可,不再需要这种候选淘汰法。
  • 如果赛道只有 4 条,分组方式和最后候选赛容量都会改变,不能直接套用 7 场答案。
  • 找前 k 名时,候选集合会沿冠军赛名次形成一个三角形:冠军组保留更多名次,第二冠军组少保留一名,越往后保留越少。

IQ014 · 概率类

抽盒循迹:100 名囚犯按置换循环找号码

困难
答案 按盒内号码沿置换循环开盒;全员成功当且仅当没有长度超过 50 的循环,概率约 31.18%31.18\%

题面

房间里有 100 个关闭的盒子,盒子外面编号为 1 到 100。盒子里面各放一张号码纸条,纸条上的号码也是 1 到 100,并且每个号码恰好出现一次。也就是说,盒子编号和盒内号码之间形成了一个随机配对。

外面有 100 名囚犯,也编号为 1 到 100。第 i 名囚犯的目标,是在盒子里找到写着 i 的那张纸条。

囚犯可以在进房间前一起商量一个统一策略。之后他们一个接一个单独进房;每个人最多只能打开 50 个盒子,可以看见打开盒子里的号码,但离开前必须把盒子恢复原状,不能移动纸条,不能留下记号,也不能把看到的信息告诉后面的人。

如果 100 名囚犯全都在自己的 50 次机会内找到自己的号码,就算全员成功;只要有 1 人失败,就算整体失败。问应该采用什么策略,才能让全员成功的概率尽可能高?这个概率大约是多少?

第一原则

把“盒子 k 里面写着号码 j”看成一支箭头 kjk\to j。因为每个号码只出现一次,每个盒子也只有一张纸条,所以这些箭头不会分叉,最终会分解成若干个循环。囚犯 i 从 i 号盒开始,再打开刚看到的号码对应的盒子,等于沿着包含 i 的那个循环往前走。若这个循环长度是 L,他会在第 L 次打开时看到自己的号码。因此每个人能否成功,只取决于自己所在循环是否不超过 50;全员成功等价于整个置换里没有长度超过 50 的循环。

详细解法

  1. 策略很简单:第 i 名囚犯先打开 i 号盒子。如果盒子里正好是 i,他立刻成功离开。
  2. 如果 i 号盒里写的是 j,就把 j 当作下一个盒子编号,继续打开 j 号盒。若里面又写着 k,就再打开 k 号盒。一直按“刚看到的号码就是下一次要开的盒子编号”走下去,最多走 50 步。
  3. 为什么这不是乱走?因为盒内号码给了一个指针。比如 7 号盒写 1,1 号盒写 42,42 号盒写 7,那么 714277\to 1\to 42\to 7 是一个长度为 3 的循环。囚犯 7 依次打开 7、1、42 号盒,就会在第 3 次看到 7。
  4. 更一般地说,囚犯 i 的路径一定留在包含 i 的同一个循环里。循环没有岔路,也不会提前跳到别的循环;走完整个循环时,最后一个盒子里必然写着 i,于是他找到自己的号码。
  5. 所以,如果囚犯 i 所在的循环长度 L50L\le 50,他一定会在 50 次以内成功;如果 L>50L>50,他需要走到第 L 次才会看到 i,而题目只给 50 次,所以他一定失败。
  6. 整体要求是 100 人全都成功。因此不是“多数人成功”就够,而是每一个循环都必须短到不超过 50。换句话说,全员成功当且仅当随机排列没有长度为 51、52、...、100 的循环。
  7. 接下来估计概率。对一个固定的 k>50k>50 来说,随机置换里出现长度为 k 的循环的概率是 1k\frac{1}{k}。直观上,可以先选出这 k 个元素,把它们排成一个环,再随意排列剩下元素;做完计数后正好得到 1k\frac{1}{k}
  8. k>50k>50 时,两个这样的长循环不可能同时存在,因为它们的长度加起来会超过 100。所以失败概率就是出现某个长循环的概率之和:151+152++1100\frac{1}{51}+\frac{1}{52}+\ldots +\frac{1}{100},约为 0.688172。
  9. 因此成功概率是 1(151+152++1100)1-(\frac{1}{51}+\frac{1}{52}+\ldots +\frac{1}{100}),约为 0.311828,也就是约 31.18%31.18\%。这不是保证成功,但已经远远高于每个人随便开 50 个盒子的全员成功概率。

常见误区

  • 不要让每个人独立随机开 50 个盒子。单个人看起来有一半机会找到,但 100 个人都成功的概率会小到几乎为零。
  • 不要把 31.18%31.18\% 理解成每个囚犯各自有 31.18%31.18\% 的成功率。循环策略下,某个短循环上的人会一起成功,某个长循环上的人会一起失败,事件之间高度相关。
  • 不要以为第 51 次以后“也许前面已经碰到自己”。在一个长度为 L 的循环中,囚犯 i 第一次看到 i 正好是在第 L 次;若 L>50L>50,就必然来不及。
  • 不要从任意盒子开始。关键是从自己的编号盒开始,这样才保证自己沿着包含自己号码的循环走。
  • 不要移动纸条、做记号或传话。那些操作会改变题目模型;标准解法只使用事先约定好的开盒规则。
  • 全员成功条件比单人成功严格得多。只要存在一个超过 50 的循环,那个循环上的囚犯都会失败,整体就失败。

变体

  • 如果有 n 名囚犯和 n 个盒子,每人能开 n2\frac{n}{2} 个盒子,循环策略的成功条件就是没有长度超过 n2\frac{n}{2} 的循环。n 很大时,成功概率会接近 1ln21-ln2,约 30.69%30.69\%
  • 如果每人能打开 m 个盒子,成功条件会变成没有长度超过 m 的循环;当 m 小于 n2\frac{n}{2} 时,多个过长循环可以同时出现,概率计算就不再只是简单相加。
  • 如果每人可以开 100 个盒子,当然必定成功;如果只能开 49 个盒子,哪怕最大循环长度是 50 也会失败。
  • 如果目标改成“至少 99 人成功”,长循环不一定立刻让目标失败,因为失败人数取决于长循环里有多少人;这已经是另一个问题。
  • 如果允许囚犯交流、留下标记或重新摆放纸条,后来的囚犯可以利用新信息,原来的置换循环模型就不再适用。

IQ015 · 公共知识类

蓝眼离岛:公开宣布怎样让沉默变成证据

困难
答案 若有 c 个蓝眼人,他们会在第 c 天清晨一起离岛。

题面

一座岛上住着一群完全理性的岛民。每个人都能看见其他所有人的眼睛颜色,却看不见自己的眼睛颜色。

岛上有一条规则:只要某人能确定自己是蓝眼,就必须在下一个清晨离岛;如果还不能确定,就不能因为猜测而离岛。

岛民之间不能讨论眼睛颜色,也不能用暗号传递信息。他们都知道这些规则,也知道其他人同样理性、同样知道这些规则。

某天傍晚,一个诚实的外来者当着所有岛民的面公开宣布:岛上至少有一个蓝眼人。大家都亲耳听见,也知道别人都亲耳听见。

如果实际上一共有 c 个蓝眼人,从公告后的第一个清晨算第 1 天,蓝眼人会在第几天离岛?为什么一句看似大家早就知道的话会改变局面?

第一原则

关键不是普通知识,而是公共知识。公共知识的意思是:所有人知道这件事,所有人也知道所有人知道这件事,并且这种“知道别人知道”的层级可以一直往下推。公开宣布把“至少一个蓝眼人”变成共同的推理起点;之后每一个没有人离开的清晨,都会排除一个更小的蓝眼人数。

详细解法

  1. 先看最小情况。若 c=1c=1,唯一的蓝眼人看不到任何其他蓝眼人。外来者说至少有一个蓝眼人,而他看不到别人是蓝眼,所以只能推出自己是蓝眼。他会在第 1 天清晨离岛。
  2. 再看 c=2c=2。每个蓝眼人都看到另一个蓝眼人。任意一个蓝眼人会想:如果我不是蓝眼,那么我看到的那个人就是唯一蓝眼人;按 c=1c=1 的推理,他会在第 1 天清晨离岛。可是第 1 天没人离岛,所以“我不是蓝眼”被排除。两名蓝眼人都会在第 2 天清晨离岛。
  3. c=3c=3 时,每个蓝眼人都看到另外两个蓝眼人。他会想:如果我不是蓝眼,那么真实情况就是 c=2c=2,那两个人应该在第 2 天清晨离岛。若第 1 天、第 2 天都没人离岛,他就知道自己也必须是蓝眼。于是三名蓝眼人在第 3 天清晨一起离岛。
  4. 一般情况用归纳法。假设当蓝眼人数为 k 时,所有蓝眼人会在第 k 天清晨一起离岛。现在有 k+1k+1 个蓝眼人。每个蓝眼人都看到 k 个蓝眼人,并考虑“如果我不是蓝眼,那么只有 k 个蓝眼人”。按照归纳假设,那 k 个人会在第 k 天清晨离岛。
  5. 如果第 k 天清晨仍然没人离岛,这个假设就错了;每个蓝眼人都能推出自己也是蓝眼。因此 k+1k+1 个蓝眼人会在第 k+1k+1 天清晨一起离岛。由 c=1c=1 的起点不断推出去,得到:有 c 个蓝眼人时,他们第 c 天清晨一起离岛。
  6. 公开宣布为什么有用?因为在 c 大于 1 时,很多人确实已经能看见蓝眼人,但他们未必知道别人也知道这一点。例如 c=2c=2 时,每个蓝眼人都能看到一个蓝眼人,却会担心对方看到的是零个蓝眼人。公开宣布保证了即使在这种想象世界里,对方也听到了“至少一个蓝眼人”,所以第 1 天的推理能够启动,后面的沉默才会逐日变成证据。

常见误区

  • 不要说“大家本来就知道,所以公告没用”。许多岛民知道岛上有蓝眼人,只是这个事实还没有成为所有层级都共同知道的公共知识。
  • 不要把题目当成概率题。岛民不是在猜自己有多大概率是蓝眼,而是在等待逻辑上排除所有非蓝眼的可能。
  • 不要跳过 c=1c=1。归纳链必须有一个起点;公开宣布正是让唯一蓝眼人的情况能在第 1 天发生。
  • 不要把“私下告诉每个人”当成同样效果。私下知道不等于知道别人也知道,更不等于知道别人知道别人知道。
  • 注意天数约定:公告后的第一个清晨是第 1 天。若实际有 c 个蓝眼人,前 c1c-1 个清晨没人离岛,第 c 个清晨蓝眼人一起离岛。
  • 题目规则只要求确定自己是蓝眼的人离岛;非蓝眼人看见 c 个蓝眼人,观察到他们第 c 天离开后,不会因此变成蓝眼人。

变体

  • 如果实际有 4 个蓝眼人,那么第 1、2、3 天清晨都没人离岛,第 4 天清晨 4 个蓝眼人一起离岛。
  • 如果外来者只是分别私下告诉每个人“至少有一个蓝眼人”,每个人都知道这句话,但不知道别人是否也收到了同样信息,标准归纳链不会自动启动。
  • 如果外来者公开点名说“某某是蓝眼人”,被点名的人立刻知道自己是蓝眼;这比只宣布“至少一个”强得多,题目结构也会改变。
  • 如果规则改成“只要确定自己的任意眼色就离岛”,并且眼色只有蓝和棕,蓝眼人在第 c 天离岛后,其他人可能在下一天确定自己不是蓝眼;这是另一个规则版本。
  • 帽子沉默题是同一思想的有限轮版本:每一轮无人行动,都在公开地排除一个较小的可能世界。

IQ016 · 构造类

狼羊渡河:农夫带狼羊菜安全过河

入门
答案 7 次过河:羊去、农夫空回、狼去、羊回、菜去、农夫空回、羊去。

题面

农夫、狼、羊、菜一开始都在左岸,目标是把它们全部送到右岸。船很小,每次过河必须有农夫在船上掌舵,船上除了农夫以外最多只能再带一个对象;农夫也可以自己空船返回。

危险只会发生在农夫不在的岸上:如果狼和羊单独留下,狼会吃羊;如果羊和菜单独留下,羊会吃菜。狼和菜在一起没有危险,因为它们彼此不吃对方。

问题是:在每一次过河之后,左右两岸都仍然安全的前提下,农夫应该按什么顺序摆渡,才能把狼、羊、菜全部带到右岸?

这道题里的“羊”也常被英文版本写成 goat,中文有时译作山羊或绵羊。名字不重要,重要的是它同时夹在两个冲突之间:狼会吃它,它又会吃菜。

第一原则

这不是速度题,而是状态约束题。先从第一原则看规则:农夫在某一岸时,可以看住那一岸;农夫离开后,那一岸必须自己安全。因此每次摆渡后都要检查左右两岸,尤其是没有农夫的那一岸。羊是唯一同时参与两个危险组合的对象:狼-羊危险,羊-菜也危险,所以羊不能被简单地放在某一边不管。它必须反复充当“冲突隔离物”:先把羊移走,避免左岸羊菜出事;带狼过去后又把羊带回,避免右岸狼羊出事;最后再把羊送到右岸。

详细解法

  1. 第 1 次:农夫带羊从左岸到右岸。安全检查:左岸剩狼和菜,它们不互相伤害;右岸有农夫和羊,也安全。为什么先带羊?因为如果先带狼,左岸会留下羊和菜;如果先带菜,左岸会留下狼和羊,都会出事。
  2. 第 2 次:农夫自己从右岸回左岸。安全检查:右岸只有羊,没有狼或菜,安全;左岸有农夫、狼、菜,农夫在场且狼菜本来不冲突。
  3. 第 3 次:农夫带狼从左岸到右岸。安全检查:左岸只剩菜,安全;右岸有农夫、狼、羊,因为农夫在场,狼不能吃羊。
  4. 第 4 次:农夫必须把羊从右岸带回左岸。安全检查:右岸只剩狼,安全;左岸有农夫、羊、菜,因为农夫在场,羊不能吃菜。这里不能空船回,因为那会把狼和羊单独留在右岸。
  5. 第 5 次:农夫带菜从左岸到右岸。安全检查:左岸只剩羊,安全;右岸有农夫、狼、菜,狼和菜不冲突,所以安全。
  6. 第 6 次:农夫自己从右岸回左岸。安全检查:右岸留下狼和菜,仍然不冲突;左岸有农夫和羊,安全。
  7. 第 7 次:农夫带羊从左岸到右岸。安全检查:左岸清空;右岸有农夫、狼、羊、菜。即使狼、羊、菜都在同一岸,农夫也在场看管,所以完成。
  8. 把路线连起来就是:羊去、空回、狼去、羊回、菜去、空回、羊去。羊之所以来回,是因为它是两条禁忌边的公共端点:既不能和狼无人看管,也不能和菜无人看管。

常见误区

  • 不要先带狼或先带菜。先带狼会让左岸只剩羊和菜,农夫不在时羊会吃菜;先带菜会让左岸只剩狼和羊,狼会吃羊。
  • 不要忘记检查农夫离开的那一岸。危险不是在船上发生的,而是在某一岸无人看管时发生的。
  • 不要把第 4 次走成空船返回。狼刚被带到右岸后,如果羊也留在右岸而农夫离开,狼和羊就会单独相处。
  • 不要把“最多带一个对象”理解成“每次必须带一个对象”。第 2 次和第 6 次农夫可以自己回去,因为无人看管的一岸仍然安全。
  • 不要只看最终状态。最终大家都在右岸当然安全,但题目要求中间每一步也不能出现狼吃羊或羊吃菜。

变体

  • 如果把羊换成山羊、绵羊或兔子,只要规则仍是狼吃它、它吃菜,解法完全相同。角色名称可以变,冲突关系不变。
  • 如果船一次能带两个对象,农夫可以直接带狼和菜、再回来带羊,题目会变得更容易,因为羊不再需要来回隔离两个冲突。
  • 如果狼也会吃菜,原解法失效,因为第 5 次和第 6 次会把狼和菜单独留在右岸,需要重新分析状态。
  • 对象更多时,可以把每个“左岸有哪些对象、船在哪一岸”的安全状态当作图上的节点,把一次合法摆渡当作边,再用搜索找路径。
  • 传教士与野人过河也是同类问题:不是计算速度,而是每一步都保持两岸状态合法。

IQ017 · 构造类

野人渡河:三名传教士与三名野人安全过河

进阶
答案 最短需要 11 次摆渡:CC 去、C 回、CC 去、C 回、MM 去、MC 回、MM 去、C 回、CC 去、C 回、CC 去。

题面

左岸有 3 名传教士和 3 名野人,他们都要安全到达右岸。开始时船也在左岸,终点要求 6 个人全部在右岸。

船一次最多载 2 人,至少载 1 人,不能空船移动。传教士和野人都会划船,所以任意 1 人或 2 人只要在船上,就能把船划到另一岸。

安全规则只看两岸:任意一岸只要传教士人数大于 0,就不能让野人数超过传教士数。换句话说,某一岸合法当且仅当 M=0M=0MCM\ge C,其中 M 表示传教士数,C 表示野人数。

每一次船靠岸后,都要同时检查左岸和右岸。要求给出一条完整路线,使过程中从不出现不合法状态,并最终全部过河。

第一原则

把问题先拆成状态,而不是凭感觉搬人。一个状态可以写成“左岸有几个 M、几个 C,船在哪一岸”;右岸人数由总数 3M3C 自动算出。合法状态必须让左右两岸都满足 M=0M=0MCM\ge C。船的容量限制决定每次只能移动 1 人或 2 人;船的位置决定下一步只能从船所在的岸出发。因此回程不是浪费动作,而是把船带回还没运完人的那一岸,同时保持两岸合法。

详细解法

  1. 用 M 表示传教士,用 C 表示野人。记住检查规则:某一岸没有 M 时安全;有 M 时,必须保证 M 的数量不少于 C。
  2. 开始状态是左岸 3M3C、右岸 0M0C、船在左岸。目标状态是左岸 0M0C、右岸 3M3C、船在右岸。
  3. 为什么一定会有回程?船不能自己回来,也不能隔空传递。如果船到了右岸,而左岸还剩人,就必须让某个已经到右岸的人把船划回左岸,后面的人才有船可用。
  4. 第 1 步,CC 去:左岸变成 3M1C,右岸变成 0M2C。右岸没有 M,所以 2 个 C 在那里也合法。
  5. 第 2 步,C 回:左岸 3M2C,右岸 0M1C。船回到左岸,左右两岸仍然合法。
  6. 第 3 步,CC 去:左岸 3M0C,右岸 0M3C。先把 C 集中到右岸,可以为后面移动 M 腾出安全空间。
  7. 第 4 步,C 回:左岸 3M1C,右岸 0M2C。船再次回到左岸,准备运送传教士。
  8. 第 5 步,MM 去:左岸 1M1C,右岸 2M2C。两岸都是 M=CM=C,所以安全。
  9. 第 6 步,MC 回:左岸 2M2C,右岸 1M1C。只让 M 回会让右岸 1M2C,不合法;只让 C 回会让左岸 1M2C,不合法,所以要一 M 一 C 同回。
  10. 第 7 步,MM 去:左岸 0M2C,右岸 3M1C。左岸没有 M,不会有人被吃;右岸 3M 大于 1C,也安全。
  11. 第 8 步,C 回:左岸 0M3C,右岸 3M0C。让 C 回来,是为了接走左岸最后的 C;左岸仍然没有 M,所以安全。
  12. 第 9 步,CC 去:左岸 0M1C,右岸 3M2C。右岸 3M 大于 2C,安全。
  13. 第 10 步,C 回:左岸 0M2C,右岸 3M1C。最后一次把船带回左岸,准备收尾。
  14. 第 11 步,CC 去:左岸 0M0C,右岸 3M3C。右岸 M=CM=C,左岸为空,所有人安全过河。
  15. 完整路线就是:CC 去、C 回、CC 去、C 回、MM 去、MC 回、MM 去、C 回、CC 去、C 回、CC 去。每一步都只载 1 人或 2 人,并且每一步后左右两岸都合法。

常见误区

  • 不要只检查船上坐了谁。危险发生在岸上,所以每次船离开或靠岸后,都要检查左岸和右岸。
  • 不要把 M=0M=0 的岸误判为危险。没有传教士的一岸不会触发“C 多于 M”的规则。
  • 不要省略回程。只要船在右岸而左岸还没清空,就必须有人把船划回来;空船回来不符合题意。
  • 不要让右岸暂时出现 1M2C 或左岸暂时出现 2M3C。这种“等下一步再修正”的状态已经违法。
  • 不要把 CC、MM、MC 当成固定口诀硬背。每一步真正要问的是:船容量是否满足,两岸是否仍满足 M=0M=0MCM\ge C
  • 不要混淆符号。这里 M 表示 missionary,也就是传教士;C 表示题目里的野人。

变体

  • 如果船容量变为 3,合法路线和最短步数都会改变,因为一次可以带走更多人,也可能减少回程次数。
  • 如果只有传教士会划船,或只有野人会划船,状态转移规则会改变,原来的 11 步路线可能不可用。
  • 如果人数增加到 4M4C 而船容量仍为 2,这类问题可能无解;需要用状态搜索先判断是否存在合法路径。
  • 如果题目问“最短”而不只问“给出一种方案”,可以用广度优先搜索:从初始合法状态出发,一层层枚举所有容量不超过 2 的合法移动,第一次到达终点时就是最短步数。
  • 如果把安全规则改成“只有无人看管时才危险”,那就已经不是本题的标准规则,必须重新定义哪些状态算合法。

IQ018 · 编码类

帽色校验:100 人排队报帽色的奇偶策略

进阶
答案 最多保证 99 人正确:最后一人可能错,其余 99 人可保证正确。

题面

100 个人排成一列,每个人头上戴一顶帽子,帽色只有黑、白两种。帽子的分配可以是任意的,大家事先不知道具体排列。

每个人只能看见自己前面所有人的帽子,看不见自己的帽子,也看不见自己身后人的帽子。因此队尾第 100 人能看见前面 99 顶帽子,队首第 1 人一顶也看不见。

他们必须从队尾开始,按第 100 人、第 99 人、一直到第 1 人的顺序,依次大声说出自己帽子的颜色。每个人都能听到身后已经说过的所有答案。

在开始前,100 个人可以商量一套固定策略。开始后只能按顺序说“黑”或“白”,不能用停顿、音量或别的暗号。问无论帽子怎样分配,最多能保证多少人说对。

第一原则

这题的关键是把最后一人的回答当成 1 位校验码,而不是当成真正的猜帽子。约定黑帽记为 1,白帽记为 0,黑帽数量的奇偶性就是所有这些 1 相加后除以 2 的余数。第 100 人看得见前面 99 顶帽子,可以报告它们的奇偶性;这个校验位不包含他自己的帽子,所以他可能错。但从第 99 人开始,每个人都能把“总奇偶”和“自己前方可见奇偶”相比较,剩下唯一不确定的那一顶就是自己的帽子。

详细解法

  1. 先统一约定:黑帽记为 1,白帽记为 0;如果第 100 人看到前面 99 人中黑帽数为奇数,就报“黑”,表示校验位为 1;如果看到偶数,就报“白”,表示校验位为 0。反过来约定也可以,但所有人必须一致。
  2. 第 100 人为什么不能保证正确?因为他看不见自己的帽子。对他来说,前面 99 顶帽子完全相同的两个世界可能同时存在:一个世界里他戴黑帽,另一个世界里他戴白帽。他在这两个世界会听不到任何先前信息、看到同一幅画面,却必须说同一个词,所以不可能同时答对。
  3. 第 99 人听到第 100 人给出的校验位,知道第 1 到第 99 人的黑帽总数是奇数还是偶数。他自己又能看见第 1 到第 98 人的帽子,所以能数出这些可见帽子的奇偶性。
  4. 如果第 99 人看到的奇偶性已经等于总奇偶性,说明他自己没有额外贡献 1,他就是白帽;如果两者不同,说明差的那 1 来自他的帽子,他就是黑帽。
  5. 第 99 人说出的帽色是确定正确的。于是第 98 人不仅知道原来的总奇偶性,也知道第 99 人这一顶帽子是什么颜色,可以把它从校验信息中扣掉,得到第 1 到第 98 人的黑帽奇偶性。
  6. 同理,第 98 人再把自己前方第 1 到第 97 人的可见奇偶性与这个更新后的校验位比较,就能推出自己的帽色。之后每个人都重复同一个步骤:先扣掉身后已经确定的帽子,再比较自己前方可见的奇偶性。
  7. 因此第 99 人到第 1 人每一步都只剩“自己这一顶帽子”一个未知量,全部可以保证正确。第 100 人的回答承担编码任务,可能碰巧正确,但不能被保证。

常见误区

  • 不要要求第 100 人也必然正确。他没有任何关于自己帽色的信息,牺牲他的准确性正是换来 1 位公共校验信息的代价。
  • 不要把第 100 人的报色理解成“他说自己看到黑帽多”。他报告的是前方黑帽数量的奇偶性,只关心奇数还是偶数,不关心具体有多少顶。
  • 不要把后面人的回答继续当作猜测。从第 99 人开始,每个回答都是由校验位推出的确定答案,后续的人可以把这些答案当成可靠信息。
  • 不要中途改约定。比如一开始说黑代表奇数,所有人更新时就必须一直用同一套黑/白与奇/偶的对应关系。
  • 不要试图让第 100 人传完整帽色列表。他只能说黑或白,最多传 1 位信息;奇偶校验刚好让每个后续人只缺的那 1 位变得可解。

变体

  • 如果共有 n 个人且仍然只有黑白两色,同样可以牺牲最后一人,用 1 位奇偶校验保证另外 n1n-1 人正确。
  • 如果把约定改成“黑代表偶数、白代表奇数”,策略仍然成立;重要的是所有人使用同一张翻译表。
  • 如果帽色有 k 种,可以把颜色编号为 0 到 k1k-1,用模 k 的和做校验。最后一人仍可能错,后面的 n1n-1 人可以保证正确。
  • 如果大家听不到身后已经报出的答案,就无法逐步扣掉已知帽子,99 人保证正确的结论不再成立。
  • 如果改成从队首先报,队首看不见任何帽子,也无法先给出关于其他人的有效校验位,策略需要重新设计。

IQ019 · 不变量类

蚂蚁换身:木棍上同速蚂蚁碰头掉头的掉落时间

入门
答案 碰头掉头等价于互相穿过并交换身份。若木棍长 L、速度 v、位置为 x_i,最早全落时间是 maxmin(xi,Lxi)/vmax min(x_i, L-x_i)/v,最晚全落时间是 maxmax(xi,Lxi)/vmax max(x_i, L-x_i)/v

题面

有一根长度为 L 的直木棍,左端记为 0,右端记为 L。若干只蚂蚁分别站在木棍上的已知位置 x_i,且 0<xi<L0<x_i<L。所有蚂蚁爬行速度相同,记为 v。

每只蚂蚁一开始只能朝左或朝右爬。蚂蚁爬到任意一个端点时,会立刻从木棍上掉下去;两只蚂蚁在木棍上相遇时,会同时掉头,继续以同样速度爬行。

如果题目没有告诉你每只蚂蚁一开始朝哪边,只要求判断“所有蚂蚁最早可能什么时候全部掉下去”和“最晚可能什么时候全部掉下去”,应该怎样算?如果初始方向已经给定,又该怎样避免模拟每一次相遇?

第一原则

第一原则是先分清“位置”与“身份”。两只同速蚂蚁迎面相遇时,如果它们都掉头,那么左边会有一只蚂蚁向左走,右边会有一只蚂蚁向右走;如果让它们直接穿过,左边也会有一只向左走,右边也会有一只向右走。对于木棍上每个时刻有哪些位置被蚂蚁占着,这两种描述完全一样。差别只在于我们把哪只蚂蚁叫作 A、哪只叫作 B:掉头模型像是两只蚂蚁反弹,穿过模型像是两只蚂蚁交换了名字。

详细解法

  1. 先看两只蚂蚁的局部相遇。假设 A 从左向右走,B 从右向左走,并且速度相同。相遇前,它们之间的距离等速缩短;相遇后,如果按题意掉头,A 往左、B 往右。
  2. 现在换一种说法:相遇时不让它们掉头,而是让它们互相穿过。穿过后,左边那条轨迹继续向左,右边那条轨迹继续向右。木棍上看到的“哪里有蚂蚁”完全不变,只是这条轨迹上的名字从 A 变成了 B。
  3. 因为题目通常只问“什么时候全部掉下去”,不问“名叫 A 的那只从哪端掉下去”,所以身份交换不会影响答案。我们可以把每只蚂蚁都想象成不受碰撞影响,一直沿初始方向直走到端点。
  4. 如果每只蚂蚁的初始方向已经给定,就按穿过模型逐只计算:向左的蚂蚁需要 xi/vx_i/v 时间掉下,向右的蚂蚁需要 (Lxi)/vL-x_i)/v 时间掉下。所有蚂蚁全部掉下的时间,是这些时间里的最大值。
  5. 如果初始方向未知,要让全部蚂蚁尽量早掉下,每只蚂蚁都应选择较近的端点。第 i 只蚂蚁最快可在 min(xi,Lxi)/vmin(x_i, L-x_i)/v 后掉下;但必须等最后一只也掉下,所以最早全落时间是所有这些较近端时间的最大值。
  6. 如果初始方向未知,要让全部蚂蚁尽量晚掉下,只需要让某只蚂蚁走到它能走到的最远端点,并且其他蚂蚁不会因为碰撞真正改变位置集合。因此最晚全落时间由最大远端距离决定,即 maxmax(xi,Lxi)/vmax max(x_i, L-x_i)/v
  7. 这就是这题不需要列碰撞时间表的原因:碰撞会改变身份标签,却不改变无标签的位置轨迹;掉落时间只由直走到端点的距离和速度决定。

常见误区

  • 不要把每次相遇都当成必须模拟的事件。对“全部掉下的时间”来说,模拟碰撞只是在追踪名字,不是在改变掉落时间集合。
  • 不要说“掉头就是穿过”却忘了前提:蚂蚁必须完全相同、速度相同、相遇时立刻同时掉头,且掉头不耗时。
  • 不要把最早时间误认为所有最短距离之和。蚂蚁是同时爬的,全部掉下的时刻取决于最后掉下的那只,所以要取最大值。
  • 不要把最晚时间算成每只蚂蚁远端时间之和。它们不是排队使用木棍,而是并行运动。
  • 如果题目问“最先掉下的是哪一只带名字的蚂蚁”或“A 最后从哪端掉下”,身份就不能直接忽略;此时只能说无标签轨迹不变,需要再追踪名字交换。
  • 如果速度不同、相遇后不是同时掉头,或者相遇会停顿一段时间,穿过等价就不再成立。

变体

  • 如果木棍长 100,速度为 1,蚂蚁在 20、40、70 处,最早全落时间是 max(20,40,30)=40max(20,40,30)=40,最晚全落时间是 max(80,60,70)=80max(80,60,70)=80
  • 如果所有初始方向已经给定,就不再需要在近端和远端之间取极值;直接按每只蚂蚁当前方向到端点的距离取最大值。
  • 如果蚂蚁有颜色或编号,而且问题要求指出某个编号从哪端掉下,穿过模型仍可帮助找位置轨迹,但还要在每次相遇时交换编号。
  • 同速小球在一维轨道上的弹性碰撞也常用同一视角:碰撞后交换速度,等价于两个相同小球互相穿过。
  • 三角形三只蚂蚁是否会相撞的问题是另一类方向枚举题:所有蚂蚁同向才不会相撞,至少有一对相向就会相撞。

IQ020 · 递推类

睡莲倍增:每天翻倍的池塘何时半满

入门
答案 第 29 天。因为第 30 天满池,而满池的前一天必定是半池。

题面

一个池塘里长着一种睡莲。题目约定:每过一天,睡莲覆盖的面积都会变成前一天的 2 倍。比如某天覆盖半个池塘,下一天就会覆盖整个池塘;某天覆盖四分之一池塘,下一天就会覆盖半个池塘。

现在知道,第 30 天观察时,睡莲刚好第一次铺满整个池塘。问:在第几天观察时,睡莲刚好覆盖了池塘的一半?

注意,题目问的是“半满是哪一天”,不是问睡莲最开始有多大,也不是问每天平均增加多少面积。

第一原则

翻倍增长最容易从结果往前倒推。正着看,一天后乘以 2;反着看,往前一天就除以 2。所以如果第 30 天是 1 个完整池塘,第 29 天一定是 12\frac{1}{2} 个池塘。这里不能把 30 天平均分成两半,因为指数增长不是每天增加同样多,而是每天按当前面积再翻一倍。

详细解法

  1. 先把“满池”记成 1。这个 1 不是一片叶子的数量,而是整个池塘的面积比例:1 表示 100%100\% 满池,12\frac{1}{2} 表示 50%50\% 半池。
  2. 题目说每天翻倍,意思是:明天的覆盖面积 = 今天的覆盖面积 × 2。例如今天是 14\frac{1}{4},明天就是 12\frac{1}{2};今天是 12\frac{1}{2},明天就是 1。
  3. 已知第 30 天刚好铺满,所以第 30 天的面积比例是 1。
  4. 现在反过来问第 30 天的前一天。既然第 29 天再翻倍会变成第 30 天,那么第 29 天 = 第 30 天 ÷ 2=12 = 1 ÷ 2=122 = \frac{1}{2}
  5. 因此第 29 天刚好半满。它只比满池早一天,因为从半满到满池只需要再翻一倍,而题目规定每天正好翻一倍。
  6. 如果继续往前倒推,第 28 天是 14\frac{1}{4},第 27 天是 18\frac{1}{8}。越靠近最后几天,面积增长越快,这正是指数增长的特征。

常见误区

  • 不要答第 15 天。第 15 天是把 30 天机械地除以 2,但题目里的面积不是线性增长;前 15 天和后 15 天增加的面积完全不一样。
  • 不要把“翻倍”理解成“每天增加一块固定面积”。翻倍是乘法:面积越大,下一天增加的绝对面积也越大。
  • 不要去追问最初有几片睡莲。只要知道第 30 天满池,并且每天翻倍,就足够推出第 29 天半池。
  • 不要把“第 30 天满池”理解成第 30 天之后还要再长一天才满。题目已经把第 30 天这次观察定义为满池时刻。
  • 不要忽略“刚好”两个字。它说明第 30 天是正好满池,而前一天还没有满;在翻倍规则下,前一天正好就是半池。

变体

  • 如果第 n 天刚好满池,并且每天翻倍,那么第 n1n-1 天就是半满;把 30 换成 100,答案也只是第 99 天。
  • 如果每天变成 3 倍,满池前一天就是 13\frac{1}{3} 满,而不是半满,因为反向一步要除以 3。
  • 如果问“四分之一满是哪天”,就从满池往前倒推两天:第 30 天是 1,第 29 天是 12\frac{1}{2},第 28 天是 14\frac{1}{4}
  • 细菌培养皿、病毒数量、复利增长等题目常用同一母题:看到“每天翻倍”和“何时达到一半”,优先想到从终点往前除以 2。

IQ021 · 编码类

金条付款:七天工资最少切几刀

入门
答案 最少切 2 刀,把金条分成 1、2、4 三块。

题面

一名工人要连续工作 7 天,工资是每天 1 段金条。你手里只有一根完整金条,它可以看成由 7 段等长的小段连在一起。

每天结束时都要结算一次:第 1 天结束时,工人手里必须刚好值 1 段;第 2 天结束时必须刚好值 2 段;一直到第 7 天结束时必须刚好值 7 段。

关键规则是:每天结算时,之前给出去的金条块可以拿回来,也可以换成别的金条块。也就是说,工人当天最后拿着的总价值要正确,不要求每天只能新增一小段。

为了满足 7 天的所有结算要求,最少需要切几刀?应该切成哪些长度?

第一原则

把每天累计工资看成 1 到 7 这些整数。1、2、4 是最小的二进制权重:每个整数都可以通过“拿或不拿”这些块来表示。因为 7=1+2+47=1+2+4,所以三块刚好覆盖 1 到 7;把一根金条切成三块只需要 2 刀。

详细解法

  1. 先想清楚每天到底要表示什么。第 n 天结束时,工人手里的金条总价值必须等于 n 段,所以我们需要表示 1、2、3、4、5、6、7。
  2. 如果切成 1、2、4 三块,就能用“选中某些块”的方式表示所有这些数:1=11=12=22=23=1+23=1+24=44=45=4+15=4+16=4+26=4+27=4+2+17=4+2+1
  3. 实际付款时不是每天永久多给一块,而是每天可以交换。第 1 天给 1;第 2 天给 2,并收回 1;第 3 天再把 1 给出去,此时工人有 1+21+2
  4. 第 4 天给 4,并收回 1 和 2;第 5 天再给 1;第 6 天给 2,并收回 1;第 7 天再给 1。每天结束时,工人手里的总价值分别是 1、2、3、4、5、6、7。
  5. 为什么 2 刀是最少?0 刀只有 1 块,不能支付第 1 天;1 刀最多得到 2 块,哪怕两块长度随便切,也最多只能组成空、第一块、第二块、两块一起这几种总值,无法稳定覆盖 1 到 7 的 7 个正整数。
  6. 所以 2 刀既能做到,又不可能再少,答案就是切 2 刀,得到 1、2、4 三块。

常见误区

  • 不要把题目误读成“每天只能追加付款”。本题允许把昨天给出的块拿回来,再换成新的组合。
  • 不要只盯着当天新增 1 段工资。每天检查的是工人手里累计工资的总价值:第 6 天应该是 6 段,不是当天再给 1 段就完事。
  • 不要把“切 2 刀”和“切出 2 块”混在一起。一根金条切 2 刀通常可以得到 3 块,正好是 1、2、4。
  • 不要切成 1、1、5 或 1、3、3 这类看起来也有三块的方案。关键不是块数,而是能否组合出每天需要的每个累计金额。

变体

  • 如果改成 15 天,同样思路会切成 1、2、4、8 四块,需要 3 刀,因为 1 到 15 都能用这些块组合出来。
  • 如果不允许工人退回或交换已经拿到的块,就不能用 1、2、4 的找零策略,通常需要把金条切成每天可新增的 1 段小块。
  • 如果工资不是每天 1 段,而是每天 2 段,仍可先按累计工资思考,再把 1、2、4 这些权重整体乘以 2。

IQ022 · 逻辑类

真假问路:两扇门与真假守卫

入门
答案 任选一名守卫问:如果我问另一名守卫哪扇门安全,他会指哪扇?然后选择他所指门的相反门。

题面

你站在两扇外观相同的门前。恰好一扇门通向安全出口,另一扇门通向危险地点,你不能从门本身看出区别。

门口有两名守卫。两人都知道哪扇门安全,但其中一人永远说真话,另一人永远说假话。你不知道谁是真话守卫,也不知道谁是假话守卫。

你只能任选一名守卫,问他一个问题。问完后不能追问,也不能先试一扇门再回来。怎样提问,才能保证自己选到安全门?

第一原则

关键不是猜出谁诚实,而是把两种身份合成同一种结果。问“另一名守卫会怎么说”时,答案一定经过一次说谎:问到真话守卫,他会真实转述假话守卫的错误答案;问到假话守卫,他会把真话守卫的正确答案说反。两条路径都指向错误门,所以取相反门就是安全门。

详细解法

  1. 先把两扇门起名为 A 门和 B 门。假设 A 门安全、B 门危险;如果现实相反,推理会完全对称。
  2. 对任意一名守卫问:如果我问另一名守卫哪扇门安全,他会指哪扇?
  3. 情况一:你问到真话守卫。他必须如实回答“假话守卫会怎么说”。假话守卫被问哪扇门安全时会说假话,因此会把危险门说成安全门。
  4. 情况二:你问到假话守卫。另一名守卫是真话守卫,本来会指出真正的安全门;但假话守卫不能如实转述,所以会把这个答案说反,改指危险门。
  5. 两种情况的组成方式不同,但输出相同:都得到危险门。既然守卫指给你的那扇一定是危险门,你就选择另一扇门。
  6. 这道题的核心是“保证”。好问题不需要你知道守卫身份,因为不管身份怎样,回答都会落在同一个错误结果上。

常见误区

  • 不要直接问“哪扇门安全”。真话守卫会指安全门,假话守卫会指危险门;你不知道问到谁,就无法判断答案。
  • 不要以为两个守卫都在骗你。题目说的是一个永远真、一个永远假,正是这个固定搭配让推理成立。
  • 问题里必须包含“另一名守卫会怎么说”。只问被询问者自己的判断,就没有把真假身份合成同一个输出。
  • 最后一步容易忘:听到答案后要选相反门,而不是选守卫指的门。守卫指的门在这个问题设计下总是错误门。
  • 如果题目改成守卫可能不知道答案、可能随机说话,或可能不遵守永真永假的规则,这个标准问法就不能直接保证成功。

变体

  • 可以把“哪扇门安全”改成“哪条路通向村庄”。只要选项恰好二选一,且一真一假固定存在,方法不变。
  • 也可以问是非题:如果我问另一名守卫“左门安全吗”,他会回答是吗?如果答案是“是”,就走右门;如果答案是“否”,就走左门。
  • 若增加第三名随机守卫,需要先设计问题排除随机性,难度会明显上升。
  • 同类题常被称为骑士与无赖题:骑士永远说真话,无赖永远说假话。

IQ023 · 概率类

生日相撞:23 人同生日概率为何过半

入门
答案 23 人时,至少两人生日相同的概率约为 50.73%50.73\%,已经超过一半。

题面

假设一年固定有 365 天,暂时忽略闰年;每个人的生日独立产生,并且落在任意一天的机会都一样。现在有 n 个人同时站在一个房间里。

问题不是问“有没有人和我同一天生日”,而是问这 n 个人里面任意两个人是否可能同一天生日。只要出现一对同生日,就算成功。

直觉常会猜要接近 183 人才有一半机会,因为 183 差不多是 365 的一半。但真实答案小得多:到 23 人时,至少一对同生日的概率已经超过 50%50\%。为什么会这样?

第一原则

直接计算“至少一对同生日”会遇到很多重叠情况:可能只有一对相同,也可能两对相同,还可能三个人同一天。更简单的做法是先算反面,也就是“所有人的生日都不同”。这个反面事件只有一种清晰要求:新人必须避开前面已经占用的生日。最后用 1 减去全不同的概率,就得到至少一对相同的概率。23 人让人意外,是因为人和人之间的潜在配对数增长很快:23 人不是只有 23 次机会,而是有 23×222=25323\times \frac{22}{2}=253 对可以发生相撞。

详细解法

  1. 先把目标事件命名为 A:至少有两个人生日相同。它的反面不是“所有人都相同”,而是“任意两个人都不同”,也就是所有人的生日全都不同。
  2. 为什么反面更好算?因为可以按人一个一个进房间。第 1 个人没有需要避开的生日,所以无论哪天都可以,概率是 365365\frac{365}{365}
  3. 第 2 个人要和第 1 个人不同,只需要避开 1 天,因此有 364 天可选,概率是 364365\frac{364}{365}
  4. 第 3 个人要和前 2 个人都不同,需要避开 2 个已经出现的生日,因此概率是 363365\frac{363}{365}。继续下去,第 k 个人要避开前面 k1k-1 个生日,概率是 (365k+1)/365365-k+1)/365
  5. 所以 n 个人生日全不同的概率是 365365×364365×363365××(365n+1)/365\frac{365}{365} \times \frac{364}{365} \times \frac{363}{365} \times \ldots \times (365-n+1)/365
  6. 代入 n=23n=23,要乘到 343365\frac{343}{365},因为第 23 个人必须避开前面 22 个生日,还剩 36522=343365-22=343 天可选。
  7. 这个乘积约为 0.4927,也就是全都不同的概率约 49.27%49.27\%
  8. 现在回到原问题。至少一对同生日和全都不同是互补事件:二者必有一个发生,并且不能同时发生。因此至少一对同生日的概率是 10.4927=0.50731-0.4927=0.5073,约 50.73%50.73\%
  9. 再看为什么 23 会这么早。23 个人能组成 23×222=25323\times \frac{22}{2}=253 对。虽然每一对单独相同的概率只有 1365\frac{1}{365},但可比较的对子已经很多;从逐个进房间的角度看,第 2 人避开 1 个生日,第 3 人避开 2 个生日,一直到第 23 人避开 22 个生日,总共是 1+2++22=2531+2+\ldots +22=253 个避让要求。这些小压力连乘起来,已经足以把全不同概率压到一半以下。
  10. 22 人时全不同概率约 52.43%52.43\%,至少一对相同约 47.57%47.57\%;23 人时跨过一半。这就是经典答案不是 183,而是 23 的原因。

常见误区

  • 不要把问题看成“有人和我的生日相同”。如果你已经在房间里,另外 22 个人里至少一人和你同生日的概率只有 1(364365)221-(\frac{364}{365})^22,约 5.86%5.86\%。生日悖论问的是任意两个人之间相撞。
  • 不要用 23365\frac{23}{365} 来估计。23 是人数,不是比较次数;真正快速增长的是两两配对数,23 人有 253 对。
  • 也不要直接把 253 对各自的 1365\frac{1}{365} 相加后当成精确答案。不同配对会重叠,例如三个人同一天生日会同时制造三对相同,所以精确计算要用互补事件。
  • “至少一对”包括很多情况:一对相同、两对相同、三个人同一天、更多人同一天都算成功。题目没有要求恰好一对。
  • 经典答案依赖简化模型:365 天等概率、每个人生日相互独立、忽略闰年。真实生日分布不完全均匀,但这不会改变本题的核心推理方法。

变体

  • 如果一年按 366 天计算,公式只要把 365 全部换成 366;超过一半的最小人数仍然是 23。
  • 如果问“至少三个人同一天生日”,不能只看两两配对,需要重新按占用人数或分布情况计算。
  • 如果问“至少有人和指定某人同生日”,就变成每个新人是否命中那一个固定日期,23 人规模下远低于 50%50\%
  • 如果问“多少人可以保证一定有两人同生日”,那是抽屉原理:365 天模型下需要 366 人。生日悖论问的是概率超过一半,不是百分百保证。
  • 如果生日分布不均匀,某些日期更常见,相撞概率通常会比均匀模型略高;均匀模型反而是最整齐、最适合入门推导的版本。

IQ024 · 概率类

子女性别:两个孩子的条件概率陷阱

进阶
答案 在男/女等可能且互不影响的标准假设下,“至少一个是男孩”为 13\frac{1}{3};“较大的是男孩”为 12\frac{1}{2}

题面

一个家庭有两个孩子。为了把题目先说清楚,假设每个孩子是男孩或女孩的机会相同,并且两个孩子的性别互不影响。

现在问:在得到一些已知信息后,这个家庭两个孩子都是男孩的概率是多少。

版本 A:只知道“至少一个孩子是男孩”。版本 B:明确知道“较大的孩子是男孩”。

这两个说法听起来都在提供男孩信息,但它们筛掉的家庭不同,所以不能直接套同一个答案。

第一原则

条件概率要先问“已知条件把哪些情况留下了”。先列出原始等可能情况,再用条件过滤分母,最后在留下的情况里数成功情况。

详细解法

  1. 第一步是给两个位置命名:大孩和小孩。B 表示男孩,G 表示女孩。
  2. 原始样本空间有四种等可能情况:BB、BG、GB、GG。这里必须把 BG 和 GB 分开,因为“谁较大”是题目会用到的信息。
  3. 版本 A 的条件是“至少一个是男孩”。它只排除 GG,留下 BB、BG、GB 三种等可能家庭。目标“两孩都是男孩”只对应 BB,所以概率是 13\frac{1}{3}
  4. 版本 B 的条件是“较大的是男孩”。它直接固定了大孩这个位置,留下 BB、BG 两种等可能家庭。目标仍然只对应 BB,所以概率是 12\frac{1}{2}
  5. 差别来自分母:版本 A 的分母是三个家庭,版本 B 的分母是两个家庭。条件概率改变的是“从哪里数”,不是只改变一句话里的关键词。
  6. 如果题目只说“我看见一个孩子是男孩”或“家长提到一个男孩”,还缺少采样过程。随机看见一个孩子、家长主动选择说哪个孩子、只筛选有男孩家庭,可能对应不同分母。

常见误区

  • 不要把“一个男孩一个女孩”当成和 BB、GG 一样的单个等可能格子;混合性别其实有 BG、GB 两种年龄顺序。
  • 不要把“至少一个男孩”偷偷改成“另一个孩子之外,指定这个孩子是男孩”。前者没有指定位置,后者指定了位置。
  • 不要在采样方式没说清时硬给唯一答案。“知道一个男孩”的信息是怎么来的,会决定条件样本空间。

变体

  • 若随机抽一个两孩家庭,再随机看其中一个孩子,且看见的是男孩,则在这个采样模型下答案为 12\frac{1}{2}
  • 若家长说“我有一个儿子”,但没有说明家长会怎样选择要提的孩子,答案依赖这条发言规则。
  • 星期二男孩悖论把条件切得更细:至少一个孩子是“星期二出生的男孩”,分母会再次改变。
  • 医学筛查、抽样调查和抽卡题也常犯同样错误:先听到一个条件,却没弄清它如何筛选样本。

IQ025 · 递推类

约瑟夫环:每隔一人淘汰后谁幸存

进阶
答案 每次淘汰第 2 人时,若 n=2m+ln=2^m+l,幸存位置是 2l+12l+1;100 人答案是 73。

题面

n 个人按 1 到 n 编号,围成一圈。1 号先报 1,2 号报 2,凡是报到 2 的人立刻离开;离开者的下一人重新从 1 开始报。

这个过程一直继续,直到只剩 1 个人。问题是:最后留下来的原始编号是多少?经典版本问 n=100n=100 时谁会幸存。

这里的规则非常重要:编号从 1 开始,第一次被淘汰的是 2 号,每次都是“隔一人淘汰一人”。

第一原则

先看人数是 2 的幂的情形:每完成一轮,人数刚好减半,新的起点仍然是当前圈里的第一个人,所以 1 号一路保持优势。若人数不是 2 的幂,就先淘汰掉多出来的 l 个人;这会把起点向后推到 2l+12l+1,然后剩下的人数正好变成 2 的幂。

详细解法

  1. 把幸存者记为 J(n)。先从最容易的情况开始:如果 n=1n=1,唯一的人当然幸存,J(1)=1J(1)=1
  2. 如果 n=8n=8,第一轮淘汰 2、4、6、8,剩 1、3、5、7;下一轮淘汰 3、7,剩 1、5;再淘汰 5,最后是 1。n=16n=16、32、64 也一样,每轮都整齐减半,所以 J(2m)=1J(2^m)=1
  3. 现在设 n=2m+ln=2^m+l,其中 2m2^m 是不超过 n 的最大 2 的幂,l 是多出来的人数,满足 0l<2m0\le l<2^m
  4. 先看前 l 次淘汰。因为从 1 号开始、每隔一人淘汰,前 l 个被淘汰者正好是 2、4、6、...、2l。
  5. 淘汰这 l 个人后,还剩 nl=2mn-l=2^m 个人;下一位开始报 1 的人是 2l+12l+1。剩下的人数已经是 2 的幂,所以这个“新起点”会像 1 号在 2 的幂人数中那样活到最后。
  6. 因此 k=2k=2、1 开始编号的约瑟夫环公式是 J(n)=2l+1J(n)=2l+1
  7. 100=64+36100=64+36,所以 l=36l=36J(100)=2×36+1=73J(100)=2\times 36+1=73
  8. 二进制也能看见同一件事:n 的二进制是“最高位 1+l1 + l 的二进制”,而 2l+12l+1 等于把 l 左移一位再补 1;这就像把最高位的 1 移到最右边。100 是 110010021100100_2,左移最高位后得到 100100121001001_2,也就是 73。

常见误区

  • 不要把这个公式套到所有约瑟夫题上。它只对应每次淘汰第 2 人,也就是 k=2k=2 的版本。
  • 不要忽略起点。这里是 1 号先报 1,所以第一次淘汰 2 号;如果规则改成 1 号先被淘汰,答案会变。
  • 不要混淆 0 开始编号和 1 开始编号。计算机递推常用 0 开始编号,最后要再转换回题目里的 1 开始编号。
  • 不要把 l 当成任意余数。l 必须是 n 减去“不超过 n 的最大 2 的幂”之后的余数。
  • 当 n 是奇数时,第一轮不只是“淘汰所有偶数然后停下”。报数会继续绕回开头,起点会发生移动,这也是公式需要处理旋转的原因。

变体

  • 若每次数到 k 的人淘汰,通常用递推更稳:0 开始编号时 f(1)=0f(1)=0f(n)=(f(n1)+k)modnf(n)=(f(n-1)+k) \bmod n;题目若用 1 开始编号,答案是 f(n)+1f(n)+1
  • 若起始报数的人不是 1 号,可以先按本题规则求出相对位置,再把编号整体旋转回原来的圈。
  • k=2k=2 的特殊版本,可以把 n 的二进制最高位 1 移到末尾,快速得到 1 开始编号的答案。

IQ026 · 博弈类

取石异或:三堆 Nim 石子游戏必胜策略

进阶
答案 异或和为 0 是必败态;非 0 时一步改成 0。

题面

桌上有若干堆石子。两人轮流行动,每次必须选择其中一堆,并从这一堆里拿走至少 1 颗石子。

一次行动不能同时碰两堆,也不能把石子拿成负数;如果轮到某人时已经没有石子可拿,这个人就输。

问题是:只给出每堆石子的数量,怎样判断先手有没有必胜策略?如果有,第一步应该拿哪一堆、拿多少?

第一原则

把每堆石子数写成二进制,再逐位做异或:同一位上有奇数个 1,结果就是 1;有偶数个 1,结果就是 0。所有堆的异或和叫 nimsumnim-sumnimsumnim-sum 为 0 表示每个二进制位都已经成对平衡,当前玩家无论改动哪一堆,都会破坏某一位的平衡;nimsumnim-sum 非 0 时,可以只改动一堆,把所有位重新配平。

详细解法

  1. 第一步,把每堆石子数都看成二进制数,并计算 pile1pile2pile1 \oplus pile2 \oplus \ldots ,这个结果就是 nimsumnim-sum
  2. \oplus 可以理解成“不进位的逐位加法”:某一位出现奇数个 1,答案位是 1;出现偶数个 1,答案位是 0。
  3. 如果 nimsumnim-sum 为 0,先手必败。因为合法操作只能改变一堆,设这一堆从 old 变成 new;新的总异或会从 0 变成 oldnewold \oplus new。只要 old 和 new 不同,oldnewold \oplus new 就不是 0。
  4. 也就是说,先手从 0 态走出后,一定把局面交成非 0 态。后手只要每次把非 0 态恢复成 0 态,就能一直保持优势。
  5. 如果 nimsumnim-sum 非 0,先手必胜。看 nimsumnim-sum 最高的那个 1 位;在这一位上,必定有某一堆也是 1,否则这些堆异或不可能得到 1。
  6. 选择这样一堆,记为 pile,把它改成 pilenimsumpile \oplus nim-sum。这个新值一定小于 pile,因为最高的差异位会从 1 变成 0,所以这是一次合法的“减少”。
  7. 改完后,总异或变成 nimsumpile(pilenimsum)=0nim-sum \oplus pile \oplus (pile \oplus nim-sum) = 0。于是先手一步把局面交给对方的必败态。
  8. 例子 3、4、5:写成二进制是 011、100、101。逐位异或得到 010,也就是 2,所以先手有必胜招。
  9. nimsumnim-sum 的最高 1 在 2 的位置,堆 3 的二进制 011 在这一位是 1。把 3 改成 32=13 \oplus 2 = 1,也就是从这一堆拿走 2 颗。
  10. 新局面是 1、4、5,二进制为 001、100、101;001100101=000001 \oplus 100 \oplus 101 = 000。之后无论对手怎么拿,你都再次把 nimsumnim-sum 变回 0。

常见误区

  • 不要用普通加法的奇偶性判断胜负;Nim 看的是每个二进制位的奇偶平衡。
  • 不是每次拿最大堆就好。比如 3、4、5 中,正确第一步是改动堆 3,而不是最大堆 5。
  • nimsumnim-sum 为 0 不等于桌上没有石子。例如 1、2、3 的 nimsumnim-sum 是 0,但仍然有 6 颗石子。
  • 计算 pilenimsumpile \oplus nim-sum 后,如果结果比原堆大,说明选错了堆;真正可选的堆必须在 nimsumnim-sum 最高 1 位上也有 1。
  • 这里讨论的是普通 Nim:最后拿走石子的人赢。如果规则改成最后拿的人输,结尾阶段要另外处理。

变体

  • 只有一堆时,先手直接拿完即可获胜;这时 nimsumnim-sum 就等于这一堆的大小。
  • 如果每次只能拿固定集合里的数量,例如只能拿 1、2、3 颗,就不再是标准 Nim,需要重新分析状态。
  • 如果最后拿完者输,是 misere Nim;大多数时候仍用异或思路,但只剩 1 颗小堆的末段规则要改。
  • 更一般的公平组合游戏可以先算每个子游戏的 Grundy 数,再像 Nim 石堆一样做异或。

IQ027 · 不变量类

黑白不变:缺角棋盘能否铺满骨牌

入门
答案 不能铺满,因为剩下的黑白格数量不相等,而每张骨牌都必须同时覆盖一黑一白。

题面

有一个普通的 8x8 棋盘,一共有 64 个小方格。现在把左上角和右下角这两个对角角落拿掉,棋盘上还剩 62 个小方格。

你手里有 31 张 1x2 骨牌。每张骨牌的形状正好能盖住两个共边相邻的小方格:可以横着放,也可以竖着放,但不能斜着放、不能重叠、不能伸出棋盘外。

问题是:能不能把这 31 张骨牌全部放上去,并且刚好把残缺棋盘的 62 个小方格全部盖住?

从面积看,31 张骨牌正好覆盖 31x2=6231x2=62 个格子,似乎没有问题。但这道题的关键是:面积够,只是必要条件,不一定足够。

第一原则

把棋盘按普通国际象棋棋盘那样黑白相间染色。两个共边相邻的格子颜色一定不同,所以任何一张 1x2 骨牌,无论横放还是竖放,都必然覆盖一黑一白。也就是说,铺一张骨牌会同时消耗 1 个黑格和 1 个白格,黑白消耗量始终相等。这个“每一步都保持的数量关系”就是不变量。

详细解法

  1. 先给完整 8x8 棋盘染成黑白相间。因为每一行颜色交替,而且一共有偶数个格子,所以完整棋盘里黑格 32 个、白格 32 个。
  2. 为什么相邻两格一定一黑一白?从任意一个格子往左、右、上、下移动一步,棋盘颜色都会翻转一次。因此一张覆盖两个共边相邻格子的 1x2 骨牌,不可能盖住两个同色格。
  3. 再看被拿掉的两个角。左上角和右下角在同一条主对角线上;从左上走到右下,要向右走 7 步、向下走 7 步,总共移动 14 步。移动偶数步后颜色翻转偶数次,最后颜色和起点相同,所以这两个对角角落同色。
  4. 假设这两个角都是黑色。完整棋盘原来有 32 黑 32 白,拿掉两个黑角后,剩下 30 个黑格和 32 个白格。如果你一开始把角染成白色,结论只会变成 32 黑 30 白,本质完全一样。
  5. 现在假设真的能铺满。31 张骨牌每张都覆盖一黑一白,所以一共必须覆盖 31 个黑格和 31 个白格。
  6. 但残缺棋盘上实际只有 30 个某种颜色的格子,另一种颜色有 32 个。骨牌需要的黑白数量是 31 比 31,棋盘提供的黑白数量却是 30 比 32。
  7. 这个矛盾不是某种摆法没找到,而是所有摆法都绕不过去的限制。因此这个残缺棋盘不可能被 31 张 1x2 骨牌铺满。

常见误区

  • 不要只看面积。62 个格子和 31 张骨牌确实面积匹配,但铺砖题还要满足形状、相邻关系和颜色数量等限制。
  • 不要以为“多出来两个白格”可以靠旋转骨牌解决。骨牌横放或竖放都只会盖一黑一白,旋转不会改变这个事实。
  • 不要纠结左上角到底叫黑还是白。颜色名称可以互换,关键是被去掉的两个对角角落颜色相同。
  • 不要把“不变量”理解成高级技巧。这里它只是一个永远不会变的记账规则:每放一张骨牌,黑格用掉 1 个,白格也用掉 1 个。
  • 不要用少量尝试摆法来下结论。尝试失败只能说明那些摆法不行;染色不变量能一次排除所有可能摆法。

变体

  • 如果去掉的是一黑一白两个格子,黑白数量仍然相等,染色不变量就不能直接判定不可能;这只表示还需要继续分析,不代表一定能铺。
  • 如果棋盘大小改成 m x n,仍可以先染色,再检查每个骨牌覆盖的颜色组合。颜色计数常常能快速给出不可能性证明。
  • 如果骨牌换成 L 形三格砖,普通黑白染色未必够用,可能要改用三色染色或按位置余数染色。
  • 如果去掉的是同色但不在角落的两个格子,只要其余条件还是 1x2 骨牌覆盖共边相邻格,黑白数量不平衡仍然会直接推出不能铺满。

IQ028 · 概率类

信封悖论:双信封换不换的期望陷阱

困难
答案 无额外信息时换不换是对称的;看到金额 x 后,必须知道金额生成规则或先验,才能判断另一个信封的条件期望。

题面

桌上有两个外观完全相同的信封。一个信封里的钱正好是另一个的两倍。你随机拿到其中一个信封,可以保留它,也可以换成另一个信封。

有人说:设我手里的金额是 x。另一个信封要么是 2x,要么是 x2\frac{x}{2},而且这两种情况看起来各有一半机会。所以换信封后的期望是 12\frac{1}{2}·2x+122x+\frac{1}{2}·x2=1.25x\frac{x}{2}=1.25x,比 x 大,似乎永远应该换。

可是如果这个推理对你手里的信封成立,对另一个信封也应该成立:无论你拿到哪个信封,都能说“换过去更赚”。两个信封完全对称,却都像是应该换,这就是双信封悖论。

问题是:这个 1.25x 的期望推理到底错在哪里?在没有更多信息时,换信封是更好、更坏,还是没有区别?

第一原则

关键是先分清“没看金额前”和“看见具体金额 x 后”是两个不同问题。没看金额前,如果两个金额已经固定为 a 和 2a,再随机把一个给你,两个信封完全对称,换只是把当前信封和另一个信封互换,期望不会变。看见 x 之后,问题变成条件概率:x 是较小金额的概率是多少?朴素公式把同一个 x 在一条分支里当成小金额、在另一条分支里当成大金额,又直接假设两条分支各占 12\frac{1}{2};这个“各一半”不是由题目自动给出的,必须来自金额的生成规则或先验分布。

详细解法

  1. 先看最朴素、信息最少的模型:出题人先放好两个金额 a 和 2a,然后随机把其中一个信封给你。你拿到 a 的概率是 12\frac{1}{2},拿到 2a 的概率也是 12\frac{1}{2}
  2. 在这个模型里,不换的期望是 12\frac{1}{2}·a+12a+\frac{1}{2}·2a=1.5a2a=1.5a。换信封后,你原来拿到 a 就会得到 2a,原来拿到 2a 就会得到 a,所以换的期望也是 12\frac{1}{2}·2a+122a+\frac{1}{2}·a=1.5aa=1.5a。换与不换完全对称。
  3. 注意这里的 a 是“较小金额”,在两种分支里含义不变。朴素错误推理里的 x 不一样:x 是“我看到的金额”。如果 x 是小金额,另一个是 2x;如果 x 是大金额,另一个是 x2\frac{x}{2}。它在两条分支里的身份不同。
  4. 因此看见 x 后,正确写法应该是:设 p 是“在已经看到 x 的条件下,x 是较小金额”的概率。另一个信封的条件期望是 p·2x+(1p)2x+(1-p)·x2\frac{x}{2}
  5. 什么时候应该换?把这个期望和 x 比较:p·2x+(1p)2x+(1-p)·x2>x\frac{x}{2}>x 等价于 p>13p>\frac{1}{3}。也就是说,只有当你有理由相信“x 是较小金额”的概率超过 13\frac{1}{3} 时,换才有正期望。
  6. p 不能凭空得到。它取决于金额是怎么生成的:较小金额 a 是从哪些数里抽的?不同金额出现的先验概率是多少?有没有上限、下限或整数限制?这些规则会改变你看到 x 后对“x 是小金额还是大金额”的判断。
  7. 举个直观例子:如果出题人只可能准备 10 和 20 两种金额,那么你看到 10 时一定拿到小金额,应该换;看到 20 时一定拿到大金额,不应该换。看到金额以后,决策依赖生成规则,而不是固定地“永远换”。
  8. 所以悖论的结论不是“换一定亏”,也不是“换一定赚”。在没有额外信息、也没看到金额时,两个信封对称,换不换一样;在看到具体金额后,必须补充先验或生成机制,才能计算是否值得换。

常见误区

  • 不要把“随机拿到一个信封”误读成“看到任意 x 后,x 是小金额和大金额的概率各一半”。随机的是信封,不是金额身份的后验概率。
  • 不要让同一个 x 偷换含义。若 x 是你看到的金额,它在“另一个是 2x”时代表小金额,在“另一个是 x2\frac{x}{2}”时代表大金额。
  • 不要只检查 12\frac{1}{2}·2x+122x+\frac{1}{2}·x2\frac{x}{2} 的算术。算术本身没难点,真正的问题是 12\frac{1}{2}12\frac{1}{2} 有没有依据。
  • 不要说“既然朴素推理错了,所以换一定更差”。没有额外信息时,正确说法是对称、无优势;它不是严格反向的策略建议。
  • 不要忽略“看不看信封”这个区别。没看金额前可以靠对称性判断;看见 x 后就进入条件概率问题。
  • 不要使用没有归一化的“所有金额都一样可能”的先验。金额没有上界时,这样的说法通常不能当作合法概率分布。

变体

  • 封闭金额版:如果出题人明确只会放 10 和 20,那么看到 10 应换,看到 20 不应换;未打开前仍然对称。
  • 有上限版:如果金额不可能超过某个上限,看到接近上限的金额时,它更可能已经是大金额,换的吸引力会下降。
  • 指定生成版:如果先给 A 放入金额 a,再掷硬币决定 B 是 2a 还是 a2\frac{a}{2},且你知道自己拿的是 A,换信封可能有正期望;这已经不是两个信封完全对称的原题。
  • 贝叶斯版:给定较小金额 a 的先验分布后,看到 x 时可以分别计算“a=xa=x”和“2a=x2a=x”的后验概率,再用条件期望决定是否交换。
  • 策略版:如果你可以在看到金额后使用阈值策略,例如金额低于某个数就换、高于某个数就不换,策略是否有优势取决于真实的金额分布。

Sources

资料覆盖地图

下面是用于核对题型和标准答案的公开资料。页面正文使用自己的讲法重写, 不复制第三方长文本。