此类面试题旨在了解您的想法。所以我可能会提到上面的 O(N^0.5) 解决方案,但我也会给出以下讨论......
由于椰子随着时间的推移可能会出现内部开裂,因此结果可能与 O(N^0.5) 解决方案不太一致。尽管 O(N^0.5) 解决方案是有效的,但它并不完全可靠。
我会推荐第一个椰子的线性 O(N) 解决方案,然后用第二个椰子验证结果。其中 N 是建筑物的楼层数。因此,对于第一个椰子,您可以尝试 1 楼,然后是 2 楼,然后是 3 楼,...
假设两个椰子的结构完全相同,并且以完全相同的角度掉落,那么您可以将第二个椰子直接扔到第一个弄坏的地板上。称这个椰子破地板 B。
对于 2 号椰子,您无需在 1..B-1 上进行测试,因为您已经知道第一个椰子在 B-1、B-2、... 1 层没有破裂。所以你只需要在 B 上试一下。
如果第二个椰子在 B 上断裂,那么您就知道 B 是有问题的地板。如果它没有破裂,您可以推断随着时间的推移椰子内部出现破裂和降解,并且测试开始时存在缺陷。你需要更多的椰子。
鉴于建筑规模非常有限,对您的解决方案的额外信心值得 O(N) 解决方案。
正如@Rafał Dowgird 提到的,解决方案还取决于所讨论的猴子是非洲猴子还是欧洲猴子。众所周知,非洲猴子的投掷力要大得多。因此,只有在 +/- 2 层的变化范围内才能使破坏层 B 准确。
为了保证猴子不会从所有这些楼梯上感到疲倦,建议在第一个椰子上系一根绳子。这样你就不需要为第一个椰子做 1+2+..+B = B*(B+1)/2 楼梯。你只需要做 B 段楼梯。
似乎楼梯的数量与这个问题无关,但如果猴子一开始就累了,我们可能永远无法解决。这为halting problem 提供了新的考虑因素。
我们还假设建筑物位于地球上,并且重力设置为 9.8m/s^2。我们还将假设不存在引力波。