2个球,100层楼,某一 层扔下会碎掉,怎么最快测出会碎掉的层数?
这实际上是个查找算法。如果球的数量不限制,那就是二分法查找了。
先粗调,从每隔m层扔下,测出大致范围,再每层测试,那么最大的次数:100/m + m-2,显然m应该是10.
考虑到m可能不被100整除,最优的应该是7! 实际9 也是一样,8和10 一样 。 实际的扔法,应该第一轮测试的最后一个次就不测了。比如m=10,第100 层应该不测,这样还能减少一次测试。
最终精确的公式:(100-m)/m +m-2。
还有更优化的。最终的结果14次就可以。
如果3个球呢?第二个球每隔n层扔,一共次数:(100-m)/m + (m-n)/n + n-2 看看是多少?