此类面试问题旨在考察您的思维方式。因此,我可能会提到一个O(N^0.5)的解决方案,但我也会给出以下讨论...
由于椰子随着时间的推移可能会出现内部裂纹,因此结果可能不如O(N^0.5)解决方案那样一致。尽管O(N^0.5)的解决方案很高效,但并不完全可靠。
我建议使用线性O(N)的解决方案来测试第一个椰子,然后用第二个椰子验证结果。其中N是建筑物楼层数。因此,对于第一个椰子,您可以尝试第1层,然后是第2层,然后是第3层,...
假设两个椰子的结构完全相同,并以完全相同的角度掉落,则可以将第二个椰子直接扔在第一个椰子破碎的地板上。将这个椰子的破碎地板称为B。
对于第二个椰子,您无需在1..B-1上进行测试,因为您已经知道第一个椰子没有在B-1、B-2、... 1层破碎。所以你只需要在B层上尝试它。
如果第二个椰子在B层破裂,那么您就知道B是问题所在的楼层。如果它没有破裂,那么您可以推断出椰子随着时间的推移而出现内部裂纹和劣化,测试本身就存在缺陷。您需要更多的椰子。
考虑到建筑物的规模相当有限,使用O(N)解决方案可以提高解决方案的额外信心。
正如 @Rafał Dowgird 所提到的,解决方案还取决于所讨论的猴子是非洲猴还是欧洲猴。众所周知,非洲猴投掷力度更大。因此,只能准确地将破碎的楼层B与偏差+/-2层联系起来。
为了确保猴子不会因为爬楼梯而累,最好将绳子系在第一个椰子上。这样,您就不需要为第一个椰子做1+2+..+B = B*(B+1)/2次楼梯运动。您只需要做恰好B次楼梯运动。
看起来楼梯的数量与这个问题无关,但如果猴子一开始就累了,我们可能永远无法得出解决方案。这为停机问题提供了新的考虑。
我们还假设建筑物位于地球上,重力加速度为9.8m/s^2。我们还假设不存在引力波。