一. 首先,遇到这种题目,第一反应就是二分,对半称,再对半称,所以有方法一:
- 先取出一个,剩余26个对半称(第1次),此时最优情况可能就出现了,刚好取出的那个砝码就是重量不一样的砝码(下文直接用特殊砝码代替重量不一样的砝码),于是13对13就平衡了。
- 如果取出的砝码(记为 i )是普通砝码,就继续往下称。
假设刚才分的两堆分别为A(13)与B(13),则将A(13)中取出一个砝码,记为 j ,剩下的12个砝码,对半称(第2次),分别记为 Aa’(6) 与 Ab’(6),同时对B(13)做同样处理,取出的砝码记为 k ,对半称(第3次)的两堆分别为 Ba’(6) 和 Bb’(6),此时有个特殊情况,就是刚好从堆 A(13) 与 B(13) 中取出的两个砝码中有一个是特殊砝码。这样就直接在已经取出的 i,j,k 三个砝码中来找出特殊砝码,因为经过 1 中步骤,已经知道 i 是普通砝码,则只需将 i 与 j、k 中任意一个砝码称一次(第4次),假设 i 与 j 称,如果平衡,则 k 是特殊砝码,如果不平衡,则 j 是特殊砝码,这样就一共称了4次,这还是在第二次对半称时出现最优的情况,如果 j 与 k 都不是特殊砝码,则还需要称更多次。
二. 实际上在解决这种不知道砝码是轻还是重的问题时,三分更好。
将27个砝码分为3堆,每堆9个,分别记为A(9)、B(9)、C(9)。
- 最优情况
- 将A(9)与B(9)比较,此时平衡,则C(9)中包含特殊砝码。
- 将C(9)均分成3堆,每堆3个,分别记为Ca’(3)、Cb’(3)、Cc’(3),将Ca’(3)与Cb’(3)比较,此时平衡,则Cc’(3)中包含特殊砝码。
- 将Cc’(3)中的3个砝码分别记为 i、j、k ,将 i 与 j 比较,此时平衡,则 k 为特殊砝码。这就是三分解的最优情况,称了3次。
- 普通情况
- A(9)与B(9)比较,此时不平衡(第1次),然后将A(9)与B(9)中任意一堆与C(9)比较(第2次),假设A(9)与C(9)比较,如果平衡,则B(9)中包含特殊砝码,如果不平衡,则A(9)中包含特殊砝码,并且此时我们知道特殊砝码到底是轻还是重了。
- 假设经过上一步,得到A(9)中包含特殊砝码,且特殊砝码比普通砝码重。
- 此时如果对A(9)采用方法一中的方法,取出一个砝码,然后4对4比较,且取出的砝码即为特殊砝码,这样也只称3次,但如果取出的砝码不是特殊砝码,则需要继续二分下去,共需要称5次。
- 如果继续三分,则将A(9)三分为 Aa’(3)、Ab’(3)、Ac’(3),将 Aa’(3) 与 Ab’(3) 比较(第3次),如果平衡,则 Ac’(3) 包含特殊砝码,如果不平衡,则重的一堆中包含特殊砝码(基于上面的假设)。
- 假设 Aa’(3) 中包含特殊砝码,其中的三个砝码分别为 i、j、k,任意比较两个砝码,即可得到特殊砝码(第4次)。总共称了4次。
这类型问题一般采用分治的思想解决,但知道轻重与不知道轻重的解决方法是有区别的,除去特殊情况,知道轻重,最少两个比较对象就可以解决问题,不知道轻重,则至少需要3个比较对象来解决。