NO.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装有较重的药丸。
NO.2
有个8×8棋盘,其中对角的角落上,两个方格被切掉了。给定31块多米诺骨牌,一块骨牌恰好可以覆盖两个方格。用这31块骨牌能否盖住整个棋盘?请证明你的答案(提供范例,或证明为什么不可能)。
解法
乍一看,似乎是可以盖住的。棋盘大小为8×8,共有64个方格,但其中两个方格已被切掉,因此只剩62个方格。31块骨牌应该刚好能盖住整个棋盘,对吧?
尝试用骨牌盖住第1行,而第1行只有7个方格,因此有一块骨牌必须铺至第2行。而用骨牌盖住第2行时,我们又必须将一块骨牌铺至第3行。
智力题(程序员面试经典)
最新推荐文章于 2022-10-07 11:07:28 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)