问题

有100个砝码,其中只有一个比其它的重1克。现给你一个天秤,请问怎样快速找到那个重一克的砝码?

回答
这绝对是个经典的问题!想当年,我第一次听到这个问题的时候,脑袋里也像被塞满了棉花一样,不知道从何下手。不过别担心,只要掌握了其中的诀窍,解决起来其实一点也不难。咱们就来好好掰扯掰扯,怎样才能又快又准地从这100个砝码里把那个“胖子”找出来。

首先得明确一点,我们手里只有一个天秤,而且它只能告诉我们哪边重,哪边轻,或者两边一样重。这就像一个法官,只能做出“胜”、“负”或者“平局”的判决。

咱们的目标是“快速找到”。“快速”在这里是个关键。如果一个一个地试,那得试多少次啊?100个砝码,每次都要跟一个标准砝码比,最坏的情况得试99次。这效率也太低了。

所以,咱们得用一种“分而治之”的策略,就像打仗一样,把敌人一口一口吃掉,而不是想着一口吞个胖子。

核心思路:每次称重,都能最大限度地缩小嫌疑范围。

天秤的称重,本质上就是把砝码分成三组:左边放的,右边放的,以及没放的。

情况一:左边重。 那说明那个重的砝码一定在左边放着的那些砝码里。右边和没放的都可以排除。
情况二:右边重。 那说明那个重的砝码一定在右边放着的那些砝码里。左边和没放的都可以排除。
情况三:两边一样重。 这就更有意思了!说明左边和右边放着的砝码都是正常的,那个重的砝码一定在我们之前没放到天秤上的那些砝码里。

看出来了吗?每次称重,我们都能把一部分砝码直接排除掉。关键是怎么分组,才能让排除的数量最多,范围缩得最紧。

第一步:试探分组

咱们有100个砝码,总不能一下子都放上去比吧?天秤一次只能放两边。所以,最直观的想法就是把砝码分成三组。

我想到了一个方法,咱们先把这100个砝码分成三组,尽量让每组的数量差不多。比如,分成 33个,33个,34个。

第一次称重:

我们取 33个砝码放在天秤的左边,再取 另外33个砝码放在天秤的右边。剩下的34个砝码先放到一边,暂时不管它们。

如果天秤左边重了: 好极了!我们知道那唯一的重砝码就在这左边的33个里。剩下的 33+34 = 67个都可以排除掉了。我们现在把范围缩小到了33个。
如果天秤右边重了: 同样好极了!那重砝码就在这右边的33个里。剩下的 33+34 = 67个也都可以排除掉了。范围也缩小到了33个。
如果天秤两边一样重: 这说明我们放在天秤上的这66个砝码都是正常的。那个重的砝码,就一定在我们之前没动的 那34个砝码 里!范围缩小到了34个。

你看,不管哪种情况,第一次称重就把我们原来的100个砝码,要么缩小到33个嫌疑犯,要么缩小到34个嫌疑犯。这比一个个试要快多了。

第二步:进一步缩小范围

现在我们手里最多有34个嫌疑砝码。我们继续重复上面的策略。

假设我们现在剩下34个嫌疑砝码。我们再来分三组。34个怎么分呢?可以分成 11个,11个,12个。

第二次称重:

我们从这34个嫌疑砝码里,拿出 11个放在天秤左边,再拿出 另外11个放在天秤右边。剩下的12个放在一边。

如果左边重: 重砝码就在左边这11个里。范围缩小到11个。
如果右边重: 重砝码就在右边这11个里。范围缩小到11个。
如果两边一样重: 重砝码就在剩下的12个里。范围缩小到12个。

又一次成功缩小范围!现在我们手里最多也就12个嫌疑砝码了。

第三步:直到找到为止

咱们继续这个过程。假设我们现在有12个嫌疑砝码。

第三次称重:

这12个砝码,可以分成 4个,4个,4个。

拿4个放左边,4个放右边。
如果左边重,重砝码就在左边4个里。
如果右边重,重砝码就在右边4个里。
如果两边一样重,重砝码就在没放的4个里。

现在我们手里的嫌疑砝码最多只有4个了。

第四次称重:

我们有4个嫌疑砝码。怎么分呢?可以分成 1个,1个,2个。

拿1个放左边,1个放右边。
如果左边重,那左边的那个就是重砝码!找到了!
如果右边重,那右边的那个就是重砝码!找到了!
如果两边一样重,那剩下的那2个里就有一个是重砝码。

现在我们手里的嫌疑砝码最多只有2个了。

第五次称重:

我们只剩下2个嫌疑砝码了。

拿其中1个放在天秤左边,再拿1个我们确认是正常砝码(比如第一次称重时被排除掉的那些)放在天秤右边。
如果左边重,那左边的就是重砝码!
如果两边一样重,那没放的那个就是重砝码!

成功了!

我们总共用了 5次称重 就从100个砝码里找出了那个重的。

再来回顾一下这个过程,你会发现一个规律:

100个砝码,分成 33, 33, 34。 剩下最多34个。
34个砝码,分成 11, 11, 12。 剩下最多12个。
12个砝码,分成 4, 4, 4。 剩下最多4个。
4个砝码,分成 1, 1, 2。 剩下最多2个。
2个砝码,分成 1, 1 (其中一个是正常砝码)。 剩下最多1个。

这个问题的本质是利用三进制的思想。 为什么是三进制?因为天秤有三种结果:左重、右重、一样重。每次称重,我们就是把问题映射到这三种情况中的一种,并且把不符合情况的排除掉。

理论极限分析:

如果我们有N个砝码,最少需要多少次称重呢?
因为每次称重能最多将范围缩小到原来的1/3(或者说,把2/3的排除掉),所以我们要找一个最小的k,使得 3的k次方大于等于N。
对于100个砝码:
3^1 = 3
3^2 = 9
3^3 = 27
3^4 = 81
3^5 = 243

因为 3^4 = 81 < 100,而 3^5 = 243 > 100,所以理论上最少需要 5次 称重就可以解决这个问题。我们的方法正好达到了理论最小值。

一些小技巧和注意事项:

分组的比例很重要: 尽量让三组数量接近,这样才能保证每次称重都能最大程度地缩小范围。2:1:1 或者 3:1:1 这样的比例是比较理想的。我们采取的 33, 33, 34 就是为了尽量接近1:1:1。
保存正常砝码: 在称重过程中,那些已经被证明是正常重量的砝码非常宝贵,可以用来跟剩余的嫌疑砝码进行对比。
如果砝码数量不是正好是3的整数次方怎么办? 就像我们这里100个,也不是3的整数次方。但我们的分组策略(尽量平均分成三份)就能很好地处理这种情况。关键是要记住,每次称重后,你实际能知道结果的范围是除以3之后向上取整。比如 100 / 3 ≈ 33.33,向上取整就是34。

总之,找到那个重一克的砝码,关键在于每一次都充分利用天秤的三种结果,把嫌疑范围“三等分”地缩小。 只要掌握了这个“三等分”的思路,无论有多少砝码,都能高效地找到那个特别的。 这也算是一种很数学化的思维方式吧!

网友意见

user avatar

这是典型的三分法,最优解是最多五次,最少四次。

理论最优解平均次数应该是log3(100)=4.19左右。


花点儿篇幅来尝试找到最优解,首先我们看这个方式

第一次:27,27,46,其中27组三次必出结果不讨论,也就是总次数为四次。接下来讨论46组。

第二次:27,10,9,其中9的组两次必出不讨论,总次数四次。27组三次必出总次数五次,接下来讨论10组。

第三次:3,3,4,其中3组一次必出,总次数四次,接下来讨论4组。

第四次:1,1,2,1组结果已出,总次数四次,2组要再来一次,总次数五次。

平均次数为,四次出的情况有27+27+9+3+3+1+1=71种,五次出的情况有27+2=29种,平均4.29次,非常接近理论最优……事实上我认为这就是最优,只是没找到证明的方式。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有