12枚硬币称重问题:信息论与决策树在逻辑推理中的应用
2026/8/5 9:40:30 网站建设 项目流程

1. 面试中的“12枚硬币”问题:一道经典的逻辑思维试金石

如果你在技术面试,尤其是算法或逻辑思维考察环节,遇到过“12枚硬币称重”这道题,那你一定印象深刻。它不像LeetCode上的动态规划那样有明确的套路,也不像系统设计那样可以侃侃而谈。它更像一个精巧的谜题,安静地躺在那里,考验着你将复杂问题拆解、抽象、并系统化解决的能力。很多面试官青睐这道题,不是因为它能筛选出“最聪明”的人,而是因为它能清晰地暴露一个候选人的问题解决框架:你是慌乱地开始穷举,还是冷静地定义约束?你是满足于找到一个答案,还是追求最优的解决方案?这道题背后,是信息论、决策树和严谨逻辑推理的完美结合。今天,我们就来彻底拆解这个经典问题,不仅告诉你“怎么做”,更要讲清楚“为什么可以这么做”,以及在实际面试中,如何优雅地展示你的思考过程。

2. 问题定义与约束条件:一切推理的起点

面对任何问题,第一步永远是精确理解题意。模糊的需求是bug的温床,也是面试中失分的开始。“12枚硬币称重”问题通常有以下几种常见变体,我们必须先锁定我们讨论的是哪一种。

2.1 标准问题描述

最经典的版本是这样的:你有12枚外观完全相同的硬币,其中11枚重量相同(真币),1枚是假币,其重量可能略轻,也可能略重。你有一架天平(不是电子秤),天平只能比较左右两边的重量,告诉你左边重、右边重或两边相等这三种结果。请问,最少需要称几次,才能保证找出那枚假币,并确定它是轻了还是重了?

这个描述包含了几个至关重要的约束条件,它们是整个解题逻辑的基石:

  1. 硬币总数:12枚。这个数字不是随便选的,它与称量次数有直接数学关系。
  2. 假币数量:1枚。问题复杂度是线性的,不是多枚假币。
  3. 假币特性:重量与真币不同,但不知是轻是重。这是关键!如果已知假币是轻是重,问题会简单很多。未知轻重使得每次称量获得的信息量最大化,也最考验策略。
  4. 工具限制:一架天平。这意味着我们无法获得绝对值(比如克数),只能获得相对比较结果(左重、右重、平衡)。每一次称量都是一次“三态输出”的实验:左倾、右倾、平衡。
  5. 目标保证找出假币并知其轻重。“保证”意味着你的策略必须覆盖所有可能性,无论假币是轻是重,也无论它在哪一个位置,你的方案都能在限定步骤内解决。不是平均次数,而是最坏情况下的次数。

2.2 为什么是“最少称几次”?理解信息论边界

面试官问“最少需要几次”,其实是在问这个问题的理论下界。我们可以从信息论的角度做一个快速估算,这能体现你的理论素养。

每次称量,天平有3种可能的结果(左重、右轻、平衡)。称量k次,理论上最多可以区分 3^k 种不同的“状态”或“可能性”。

我们的问题有多少种可能性呢?假币可能是12枚中的任何一枚,并且对于每一枚,它都有“轻”或“重”两种可能。所以总共有 12 * 2 = 24 种可能的初始状态(注意,所有硬币都是真币的状态不存在,因为已知有一枚假币)。

因此,我们需要通过称量结果序列来唯一确定这24种可能性中的一种。这就要求 3^k >= 24。计算一下:3^2 = 9 < 24, 3^3 = 27 >= 24。所以,从理论上讲,3次称量是可能完成任务的。如果 k=2,最多区分9种情况,小于24,所以2次称量绝对不可能保证解决。这个简单的计算立刻告诉我们,答案至少是3次,并且3次是理论上可行的。这就把问题从“要多少次”聚焦到了“如何用3次实现”。在面试中,直接说出这个信息论下界的分析,是非常加分的。

3. 核心策略与决策树构建:如何设计三次称量

知道至少要3次,和真正设计出3次的方案,中间隔着一道巨大的鸿沟。这里最核心的策略是分组与信息最大化利用。你不能第一次称量就指望运气好找到假币,必须设计一个无论第一次结果如何,都能为后续称量留下清晰、可控路径的方案。

3.1 第一次称量的设计哲学

第一次称量是基石。一个糟糕的第一次称量会导致后续情况分支混乱,无法在剩余两次称量内解决。我们的目标是让第一次称量的三种结果(左重、右重、平衡)所对应的剩余可能性,尽可能平均地分配到三个分支上,并且每个分支剩余的可能性数量,不能超过后续称量能解决的上限。

根据信息论,第一次称量后,每个分支最多有 3^(k-1) = 3^2 = 9 种可能性需要区分。所以,我们第一次称量要确保,无论出现哪种结果,剩下的“嫌疑”可能性不超过9种。

一个经典且正确的第一次称量方案是:将12枚硬币分成三组,每组4枚,记为A组、B组、C组。 第一次称量:A组(4枚) vs B组(4枚)。

我们来分析这次称量产生的三个结果分支:

  • 分支一:天平平衡。这意味着A组和B组的8枚硬币都是真币。假币一定在未参与称量的C组(4枚)中。同时,我们获得了至关重要的标准重量参考——A组和B组的任何一枚硬币都是真币。这个分支下,剩余可能性是:假币在C组的4枚中,且不知轻重。共4 * 2 = 8种可能性。8 <= 9,符合要求。
  • 分支二:天平左重(A > B)。这意味着假币要么在A组(且为重币),要么在B组(且为轻币)。C组的4枚可以暂时标记为真币(作为参考)。这个分支下,剩余可能性是:A组4枚中的一枚是重的假币,或B组4枚中的一枚是轻的假币。共4 + 4 = 8种可能性。注意,这里“轻重”是绑定的(A组嫌疑则必重,B组嫌疑则必轻),所以不是4*2,而是4+4。8 <= 9,符合要求。
  • 分支三:天平右重(A < B)。这与分支二对称。假币要么在A组(且为轻币),要么在B组(且为重币)。C组为真。剩余可能性也是8种。

可以看到,这个分组策略完美地将24种初始可能性,均匀地分配到了三个分支,每个分支承接8种可能性,都没有超过后续2次称量能处理的9种上限。这就是最优设计的体现。

3.2 第二次称量的分治策略

第一次称量后,我们进入了三个不同的分支。每个分支都是一个子问题,但子问题的“已知信息”不同。我们必须针对每个分支,设计第二次称量。这里以最复杂的“天平不平衡”分支(例如左重A>B)为例来详解,因为“平衡”分支相对简单。

分支:第一次称量 A > B已知:嫌疑硬币在A1, A2, A3, A4 (可能为重) 或 B1, B2, B3, B4 (可能为轻)。C1~C4为标准真币。

现在我们有8个嫌疑对象,需要设计第二次称量,使得无论结果如何,第三次称量都能一锤定音。关键在于混入已知的真币(C组),并打破原有的分组,以获取新的信息维度。

一个经典的第二次称量方案是: 左边托盘:A1, A2, B1, B2, C1 (即:2枚可能重的A + 2枚可能轻的B + 1枚已知真币C) 右边托盘:A3, A4, B3, C2, C3 (即:2枚可能重的A + 1枚可能轻的B + 2枚已知真币C) 注意,这里A4和B4没有参与第二次称量。

这个配置非常精妙,它混合了不同类型的嫌疑币和真币。我们来推演第二次称量的三种结果:

  1. 第二次称量平衡:这意味着左右托盘上的所有硬币都是真币。那么,假币一定在未参与第二次称量的两枚硬币中:A4(可能重)和B4(可能轻)。第三次称量就非常简单了:拿A4与一枚已知真币(比如C1)比较。如果A4重,则它是假币(重);如果平衡,则B4是假币(轻);如果A4轻,这不可能,因为A4只可能是重。
  2. 第二次称量左重:天平方向改变了(第一次是A组重,现在是左边重)。这意味着什么?左边托盘重了。观察左右托盘的组成:
    • 左边有(A1,A2,B1,B2,C1)。其中C1是真币,B1,B2是可能轻的币,它们如果导致左边重,那只能是它们其实是真币(轻币不会导致左重)。所以B1,B2嫌疑下降。
    • 右边有(A3,A4,B3,C2,C3)。其中C2,C3是真币。
    • 导致左重的可能性集中在:左边托盘中的A1或A2是重假币(使得左边更重),或者右边托盘中的B3是轻假币(使得右边更轻,相对左边就重了)。
    • 所以,嫌疑范围缩小到{A1(重), A2(重), B3(轻)},共3种可能性。第三次称量足以解决(例如,比较A1和A2,平衡则B3为轻假币,否则重的那枚是假币)。
  3. 第二次称量右重:分析与“左重”对称。嫌疑范围会缩小到{A3(重), A4(重), B1(轻), B2(轻)}?不,这里需要仔细分析。右重意味着右边重了。可能的情况是:右边托盘中的A3或A4是重假币,或者左边托盘中的B1或B2是轻假币。所以嫌疑范围是{A3(重), A4(重), B1(轻), B2(轻)},共4种可能性。这仍然在第三次称量可解决的范围内(例如,比较A3和A4,再结合与真币的比较)。

通过这样设计,第二次称量成功地将8种可能性分散到三个更小的子集中(2个,3个,4个),每个子集都能在最后一次称量中被唯一确定。

3.3 第三次称量的收官之战

第三次称量通常是最简单的,因为经过前两次,嫌疑范围已经缩小到2-4枚硬币,并且我们拥有充足的真币作为参考。此时的目标是一次比较,直接锁定唯一假币并判断轻重。策略通常是:

  • 如果嫌疑对象只剩2枚,且已知它们一个可能重、一个可能轻(如上面的A4和B4),只需取其中一枚与真币比较。
  • 如果嫌疑对象是2-3枚同类型(都可能重或都可能轻),只需将它们互相比较,或与真币比较一次。
  • 如果嫌疑对象是3-4枚混合类型,需要设计一个比较,使得三种结果能映射到不同的硬币上。这通常需要利用已知的真币来构造比较组。

分支:第一次称量平衡这个分支最简单。假币在C组4枚中,不知轻重。第二次称量可以:C1, C2, C3 vs 三枚真币(来自A或B组)。

  • 如果平衡,则C4是假币,第三次称C4与真币即知轻重。
  • 如果不平衡,假设左重(C1,C2,C3 > 真币),则假币在C1,C2,C3中且为重。第三次只需比较其中两枚,如C1 vs C2,平衡则C3重,否则重的那个是假币。

整个决策树就像一棵三叉树,每一次称量都是一个三路分支,最终所有叶子节点(24种可能性)都在深度为3的地方被唯一标识。

4. 面试实战:如何展示你的思考而不仅仅是答案

在面试中,直接背诵答案价值有限。面试官想看到的是你解决陌生逻辑难题的过程。以下是我建议的答题框架:

  1. 澄清问题:首先,复述问题并确认所有约束。“请允许我确认一下:我们有12枚硬币,一架天平,一枚假币不知轻重,目标是保证找出并知轻重,对吗?”这显示你的严谨。
  2. 理论分析(关键加分项):不要急于说方案。先分析理论下限。“这是一个信息论问题。每次称量有3种结果,称k次最多区分3^k种状态。我们有12枚硬币*2种轻重可能=24种状态。所以需要3^k >= 24,k最小为3。因此,理论上3次是可能的,2次不可能。我们的目标是找到一个3次的策略。”这立刻将你与只会蛮干的候选人区分开。
  3. 阐述核心策略:“核心策略是分组和利用信息最大化。第一次称量必须设计成无论什么结果,剩余的可能性不超过9种(因为3^2=9),以便后续两次能解决。”
  4. 逐步推演,边画边说:这是最重要的部分。向面试官要一张纸或白板。
    • 画决策树:在顶部写下“12硬币,24种状态”。
    • 第一次称量:画出第一次称量方案(如A组4 vs B组4)。画出三个分支:平衡、左重、右重。在每个分支下,写出剩余的嫌疑集(如平衡:C组4枚,8种状态;左重:A组可能重或B组可能轻,8种状态)。强调这个分组的均衡性。
    • 第二次称量:选择一个分支(通常是左重)进行详细推演。画出你设计的第二次称量方案(如混合A、B、C组硬币)。再次画出三个子分支(平、左重、右重),并分析每个子分支下,嫌疑如何缩小到2-4个。
    • 第三次称量:展示对于第二次称量后的每个小嫌疑集,如何用一次比较收官。可以只详细演示一个路径。
  5. 总结与验证:“通过这样一棵三层的决策树,我们确保了24种初始状态的每一种,都有一条唯一的、长度为3的称量结果路径与之对应。因此,3次称量可以保证解决。”

如果你时间充裕或面试官追问,可以补充:

  • 变体讨论:“如果硬币数量是13枚呢?3^3=27 >= 26,理论上3次也可能,但第一次分组需要更精巧,因为13无法被3整除。这是一个更难的挑战。”
  • 通用化思考:“这本质上是利用三进制编码给硬币贴标签。每次称量结果(左重、右重、平)可以看作三进制的0,1,2。我们需要为24种状态分配一个唯一的三进制编码(长度为3)。称量设计就是在解码这个编码。”

5. 常见误区与避坑指南

在实际思考和面试表述中,有几个高频误区需要避免:

  1. 盲目二分:这是最大的陷阱。很多人下意识想到“二分法”,但天平不是二分,是三分(左、右、平)。二分法思维会导致你总想分成两堆,忽略了“平衡”结果所蕴含的“全部是真币”这一巨大信息量。正确思路是“三进制”思维。
  2. 第一次称量随意分组:比如分成6 vs 6。如果天平不平衡,你只知道假币在这12枚中,但不知道轻重倾向,剩余可能性是12*2=24种,第二次称量根本无法处理。必须确保第一次称量后,每个分支的剩余可能性≤9。
  3. 忽略“标准真币”的价值:在第一次称量后,无论是平衡还是不平衡,我们都能获得一批确定无疑的真币。后续称量中巧妙地混入这些真币,是缩小嫌疑范围的关键手段。很多错误的方案就是因为后续称量只在嫌疑币内部比较,没有引入真币这个“参照物”。
  4. 只讲方案,不讲证明:给出了一个3次称量的步骤,但无法向面试官证明这个方案能“保证”覆盖所有情况。面试官可能会追问:“如果假币是A1且重,你的方案一定能找到吗?如果假币是B2且轻呢?”你需要能沿着决策树走通所有路径。在讲解时,主动选择一条路径走到底,并提及其他路径类似,能体现你思维的完整性。
  5. 混淆“找出假币”和“找出并知轻重”:如果目标只是找出假币,而无需知道它是轻是重,那么3次称量可以处理更多硬币(最多13枚)。但标准问题是要求知道轻重的,这增加了难度,因为你需要区分“轻”和“重”这两种状态。务必在开始时明确目标。

这道“12枚硬币”问题,就像一把尺子,能量出思考的深度与广度。它告诉我们,解决复杂问题不是靠灵光一现,而是靠扎实的步骤:定义问题、理论分析、设计策略、系统推演、验证完备性。掌握它,不仅是为了通过某一场面试,更是为了锻炼那种面对模糊挑战时,能一步步理清头绪、构建解决方案的底层能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询