您的位置:首页 > 其它

27个砝码中,只有一个与其他26个砝码重量不同且不知该砝码是轻还是重,问最少需要称多少次能找到该砝码

2016-07-06 16:58 405 查看
一. 首先,遇到这种题目,第一反应就是二分,对半称,再对半称,所以有方法一:

先取出一个,剩余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个比较对象来解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  益智-分治