0%

球与楼层谜题

有一栋楼共 100 层,一个小球从 n 层及以上楼层落下会被摔破,但在 n 层以下楼层落下不会摔破。给两个小球,设计方案找出 n,并且保证在最坏情况下,最小化小球下落的次数。(假设每次摔落时,如果没有摔破,则不会给小球带来损耗)

解:设最坏情况下最小次数为 $x$。

首先应在 $x$ 层开始摔第一个小球,会出现两种情况:

情况一:小球摔破,则第二个小球必须从第 1 层一直尝试到 $x-1$ 层。

为什么从 $x$ 层开始?因为需要在情况一下可解。
若开始楼层小于 $x$,则不需要 $x$ 次就可找到结果,则 $x$ 将不是最小次数,这与假设不符。
若开始楼层大于 $x$,则剩余的 $x-1$ 次不足以遍历剩下的楼层。

情况二:小球没破,则下次应在 $x + (x - 1)$ 楼层摔。

为什么从 $x + (x - 1)$ 层开始?
因为如果在 $x + (x - 1)$ 层摔破了,就还剩 $x - 2$ 次机会,正好可以从 $x + 1$ 层遍历到 $x + (x - 1) - 1$ 层。

可以看到,每摔一次都是类似的,都可能会出现上面两种情况——要么如情况一摔破第一个小球后“下探”,要么如情况二未摔破第一个小球继续“上溯”。因此,最快的查找方案就是不断“上溯”,直到第一个小球被摔破,才开始最后的“下探”。

根据情况二,我们可以推知最后到达的楼层:

由于要检测 100 层楼,所以

故 $x$ 的最小整数解为 14,也就是说最坏情况下最少也需要 14 次尝试。并且可推出如下“上溯”楼层序列:

14, 27, 39, 50, 60, 69, 77, 84, 90, 95, 99, 100

可以验证下这个解,最坏情况其实就是上述楼层数的下一层。比如 49 层,分别尝试 14、27、39、50 层,才摔破第一个小球,共试了 4 次。然后第二个小球从 40 层试到 49 层,共试了 10 次。则 4 + 10 = 14 次。(小伙伴们可以选一个楼层也推导下,比如 89。)