|
1+2+...+n=n*(n+1)/2
1+2+...+n+(n+1)=(n+1)*(n+2)/2
当N between n*(n+1)/2+1 and (n+1)*(n+2)/2 时,最多需要n+1次就可以测出总共N层的楼中,碎蛋的楼层(设为f(N))是多少,所以
f(N)=ceil(1/2*(sqrt(1+8N)-1))
解出f(N),就可以知道对于N层大楼:
- 应该首先从f(N)开始扔第一个蛋,若碎,则从1楼开始扔第二个蛋,若不碎,则转2
- 第二次从f(N)+(f(N)-1)层开始扔第一个蛋,若碎,则从f(N)+1层开始扔第二个蛋,若不碎,则以此类推,照本次的做法,开始第三次尝试
由此,可以得出非常确定的规律,令A=f(N),如果蛋一直不碎,则测试楼层依次是
A, 2A-1, 3A-3,4A-6....
他们的差为
A-1,A-2,A-3.....
假设m*A-m*(m+1)/2层还不碎,到下一次要增加的楼层为A-m时,若增加A-m就会超过N,那么就从m*A-m*(m+1)/2+1层开始测就行了,即便最后测出来还剩下一个蛋,总次数也不会超过A次。当然,此时最好的方案是从以N-(m*A-m*(m+1)/2)为新的N,记为N',然后按前述公式f(N)=ceil(1/2*(sqrt(1+8N)-1))得出应从何处开始扔第一颗蛋。
|
|