首页 > 代码库 > 100 层楼两个鸡蛋

100 层楼两个鸡蛋

有座 100 层高楼和软硬程度一样但未知的两个鸡蛋,要求用这两个鸡蛋以最少的次数确定哪一层是鸡蛋可以安全落下的最高位置。鸡蛋有可能在一楼就摔碎,也可能在一百楼摔下也没事。


假设 L 层鸡蛋没碎,L+1 层碎了,则 L 层就是所求。因为只有两个鸡蛋,所以第一个鸡蛋摔碎后,一定要能用第二个鸡蛋在限定的次数里测出目标层。


考查一个中间状态,假设最少的次数为 C。

之前已经测了 C0 次(C0<C) 层数为 L0,测到 C0+1 次层数 L1 为时,第一个鸡蛋碎了。则第二个鸡蛋就从 L0+1 层测到第 L1-1 层,可能需要测试 (L1-1)-(L0+1) 次,这个次数的限定条件是要小于 C-(C0+1)。从这个状态我们可以看出来,第 C0+1 次的楼层范围应该比 C0 的楼层范围少 1 才可以(例如:若 C0 次为 28 层到 40 层,则C0+1 次为 41 到 52。)。依次类推,设第一次的楼层为 K, 就可以得到以下的解法:

K+(K-1)+(K-2)+...+(K-C+2)+(K-C+1) >=100;最后一次时,楼层范围应该为 1,所以 K 应该和 C 相等。所以公式变为

K +(K-1)+..+1 >=100;即 K(K+1)/2>=100;得到 K 为 14;所以最少的次数为 14,也就是第一次从 14 层开始测试。


或者也可以用反推法,就是最后一次楼层为 1,然后前一次楼层依次加 1,得到的结果是相同的。


最后,真的有这样的鸡蛋么?从二楼摔下都不碎!

----------------------------------------

感觉很简单的一个事儿,看着这么多符号反而觉得不简单了。

这是以前写的,觉得复杂的请自行到网上查找,应该有很多讲解决方法的。


100 层楼两个鸡蛋