一名热爱体感技术的
业余专业开发人员

[智力题]有 20 瓶药丸,其中 19 瓶装有 1 克/粒的药丸

貌似从来没有系统性的看看程序员该看的题目,现在每天花一点时间做做题,激活下迟钝的思维。

题目:有 20 瓶药丸,其中 19 瓶装有 1 /粒的药丸,余下一瓶装有 1.1 /粒的药丸。给你
一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。

解答:

有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。

因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更
准确地说,是必须从
19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药丸,又该如何区分
没称过的那几瓶呢?别忘了,天平只能用一次。
那么,该怎么称重取自多个药瓶的药丸,并确定哪一瓶装有比较重的药丸?假设只有两瓶药
丸,其中一瓶的药丸比较重。每瓶取出一粒药丸,称得重量为
2.1克,但无从知道这多出来的0.1
克来自哪一瓶。我们必须设法区分这些药瓶。
如果从药瓶
#1取出一粒药丸,从药瓶#2取出两粒药丸,那么,称得重量为多少呢?结果要看
情况而定。如果药瓶
#1的药丸较重,则称得重量为3.1克。如果药瓶#2的药丸较重,则称得重量
3.2克。这就是这个问题的解题窍门。
称一堆药丸时,我们会有个“预期”重量。而借由预期重量和实测重量之间的差别,就能得
出哪一瓶药丸比较重,前提是从每个药瓶取出不同数量的药丸。
将之前两瓶药丸的解法加以推广,就能得到完整解法:从药瓶
#1取出一粒药丸,从药瓶#2
取出两粒,从药瓶#3取出三粒,依此类推。如果每粒药丸均重1克,则称得总重量为210克( 1 + 2
+
+ 20 = 20 * 21 / 2 = 210),“多出来的”重量必定来自每粒多0.1克的药丸。
药瓶的编号可由算式
(weight – 210 grams) / 0.1 grams得出。因此,若这堆药丸称得重
量为
211.3克,则药瓶#13装有较重的药丸。


我的想法:

这个题目,以前笔试也做过,估计是2013年时的事情吧,我记得残忍的给小白鼠灌药做过,想了很长时间才做出来,虽然最后没通过,囧。

这道题目,想了一会才想出来,没错每瓶药里的药不是只有一个,可以有N多个!这个题目没说,自己要跳出来想到,一旦想到就解决问题了。

然后我想的是只要试19次就行了,也就是1,2,3。。。。19,最后一瓶我干嘛要放进去哦!看来有时,标准答案也不是最优解。