程序员笔试智力题:建筑楼有100层,若曾第N层或更高的楼层扔下来,鸡蛋就会摔碎。若从第N层以下的楼层扔下鸡蛋不会摔碎。给你两个鸡蛋,请找出N,并要求最差情况下扔鸡蛋次数最少。
分析:试着从10楼开始扔鸡蛋,然后是20层,30层。。。。。100层
如果鸡蛋1在第十层(随便举例子的一个数值也可以是别的数,看到后面就会知道这个值应该取14,但是刚开始分析谁也不知道该取14不是么)扔下,鸡蛋摔碎。那么第二个鸡蛋只需要从1-9层依次扔下去试就能试出来是1-10中的第几层,所以最差在恰好在第十层才能摔碎,结果是1+9=10次
如果鸡蛋1在第100层是才摔碎,实验楼层依次是:10层、20层、30层、、、100层,试验了10次。在第90层时鸡蛋没有摔碎,但是在100层摔碎了。这说明N在[90,100]区间内,所以鸡蛋2只需要从91层楼开始试验,最差一直试验到99层必然会测试出N的值。最差次数:鸡蛋1的次数10次 + 鸡蛋2的次数9次 = 19次。
设计一种扔鸡蛋的方法,使得扔鸡蛋1的次数无论是第一次还是最后一次扔下的次数越稳定越好。
负载均衡方法:扔鸡蛋 1的次数 和扔鸡蛋2的次数的和 不论什么时候都是一样的,鸡蛋1多扔一次鸡蛋2 就少扔一次,假如开始扔鸡蛋1的初始楼层是x层,那么扔鸡蛋2初始楼层是由扔鸡蛋1是否摔碎决定的。即,鸡蛋1摔碎的那一楼层 和 扔鸡蛋1的摔碎之前扔的那一次楼层数之间的差值减1(假设鸡蛋1从20层开始扔下,没碎;从30层扔下,碎了,那么鸡蛋2 就得从21层开始扔,最差一直扔到29层就能判断出N的值了),如果在x层扔下没碎,那么下一次扔的楼层就是x+x-1层(第一次是20层,下一次就是20+20-1=39层)鸡蛋2的次数相应的就减去1次;第二次没碎,下次从x+ x-1 + x-2层扔下(承接上面括号的例子:20+19+18 = 57层),依次类推.....
也就是 : x + (x-1)+ (x-2)+。。。+1=100求一下x值 x = 14.先从14层往下扔,没碎的前提下再从14+13=27层往下扔。最差的情况下就是第一次在14层恰好摔碎了,鸡蛋2只需要从1-13层个扔一次就能判断出N的值了
————————————————
版权声明:本文为CSDN博主「Yi骑绝尘」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/abe_abd/article/details/77710356
来源:CSDN
作者:~石头
链接:https://blog.csdn.net/qq_31868149/article/details/103698457