程序员智力题:100层楼扔鸡蛋,确定鸡蛋摔碎的楼层N

程序员笔试智力题:建筑楼有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的值了

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值