引入
有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。比如鸡蛋在第9层没有摔碎,在第10层摔碎了,那么鸡蛋不会摔碎的临界点就是9层。
问:如何用最少的尝试次数,测试出鸡蛋不会摔碎的临界点?
分析
注意:题目的一个隐含在该最少次数下,一定能测出。
完美解决这个问题的思路是先逆向假设存在一个最优解x,第一次就应该从x层开始扔。为什么要从第x层开始扔呢?
假设第一次扔在第x+1层:如果第一个鸡蛋碎了,那么第二个鸡蛋只能从第1层开始一层一层扔,一直扔到第x层。这样一来,我们总共尝试了x+1次,和假设尝试x次相悖。由此可见,第一次扔的楼层必须小于x+1层。
假设第一次扔在第x-1层:如果第一个鸡蛋碎了,那么第二个鸡蛋只能从第1层开始一层一层扔,一直扔到第x-2层。这样一来,我们总共尝试了x-2+1 = x-1次,和假设尝试x次同样。
假设第一次扔在第x层:如果第一个鸡蛋碎了,那么第二个鸡蛋只能从第1层开始一层一层扔(因为这是最后一个鸡蛋了,所以不能再冒险隔着楼层扔了),一直扔到第x-1层。这样一来,我们总共尝试了x-1+1 = x次,刚刚好没有超出假设次数。
接下来第二次该如何扔呢?首先明确,扔第一次的结果有两种&#x