100层楼2个球

Posted by 大雁小鱼的博客 on June 11, 2018

题目

有一幢100层高的大楼,给你2个相同的玻璃球,将他们从某层扔下刚好会碎(也就是从N-1楼及以下扔下不会碎,从N楼及以上扔出会碎)。请问在最坏的情况下最少需要仍多少次才能确定刚好会碎的楼层N?注意,球一旦碎了就没有用了,如果不碎,可以继续使用。

分析

题目中有几个关键点需要特别注意:
第一、一定可以找到N,使得刚好会碎;
第二、一定存在一个最优解

根据第一点可以得出结论:100楼一定会碎,所以100楼我们无需测试;根据第二点可以得出结论,一定存在一个次数K,使得无论情况如何都能在K次内确定楼层。
请牢记这2点结论,因为我们的推理基于这2点结论。

推理

我们知道,测试K次一定能测试出来,所以我们接下来的推理就是围绕如何保证一定能在K次抛出后得出精确楼层。

第一球的第一次一定在K层仍出,为什么是K呢?因为如果K层碎了,第二球只能从1层逐层测试到K-1层,最坏的情况下需K-1次,加上第一球的1次,最坏情况下就能在K次结束。

如果第一球的第一次扔出不碎,那么第一球的第二次测试一定在K + (K - 1)层扔出,因为如果在该层碎了,第二球只能从K+1层逐层测试到2K-2层,最坏的情况下需要K-2次,加上第一球的2次,最坏情况下就能在K次结束。

很多人对上一句话中的K + (K - 1) 这个值不太理解,读者可以考虑在最坏的情况下,由于第一球的第一次被使用了,在最坏情况下,必须要保证,K+1层到第一球第二次抛的层(W)之间的层数必须等于剩下可用的次数-1,减去的1次是第一球第一次抛出的,于是在最坏情况下,K+1,K+2,K+3…..直到W层都被扔了球。不知道我有没有说明白。

于是列等式 W - K = K - 1 整理得到 W = K + (K - 1)

同理可以得出
第一球的第三次测试一定在K + (K - 1) + (K - 2)层扔出
第一球的第四次测试一定在K + (K - 1) + (K - 2) + (K - 3)层扔出
第一球的第五次测试一定在K + (K - 1) + (K - 2) + (K - 3) + (K - 4)层扔出
……

于是得到一个等差数列
K + (K - 1) + (K - 2) + (K - 3) + …… + 2 + 1
当K递减到1之后,我们就已经没有次数可用了,所以就无法再保证最坏情况下一定能在K次结束,于是我们需要保证当K递减到1的时候已经可以覆盖100层楼了,又由于100层楼一定会碎,所以只需要覆盖99层,于是得到不等式:
K + (K - 1) + (K - 2) + (K - 3) + …… + 2 + 1 >= 99

解不等式得:K >= 14,K最小值为14

结论

在最坏情况下,最多14次就能确定楼层