抛玻璃算法

  网上闲逛,看到一算法题大体如下:

有一幢100层高的大楼,给你两个完全相同的玻璃棋子。
假设从某一层开始,丢下玻璃棋子就会破碎。那么怎么利用手中的两颗棋子,
用一种什么样的最优策略,知道这个临界的层高呢?

 

  大致想了下... 得出的第一个算法是33  66  99 

  IF( 既第一个Q从33楼扔,如果碎了. 就从第一层向33层枚举..) 

   {

    假设最糟糕的情况是32楼是临界点.

     33楼 + 1 + 2 +3 ....... +32  =  33次...  嗯...上下楼33,累死了... 

 }

else

  IF(33楼扔下去没碎,那么从66楼往下扔)

       最糟糕的情况又发生了 =.=!   65层才是临界点.那么...

     33层 + 66层 + (34---65)  =33次 ..............!!!  

   如果66没碎...  99也没碎.. 那么就是 33 + 66 + 99 + (67--98 ) = 34次..

 脑袋里反映出来的第一个算法,, 最糟糕的情况要扔 33或者34次..  效率显然不高..

 

看了下回帖,有个叫IToa什么的同志... 贴出了他的算法..

   第一次从15层往下扔..碎了的话,, 最糟糕 15 + (1-13) = 14次.

  没碎继续: 第二次从(15-1)+15 = 29 层往下扔.  碎了为: 15 + 29 + (16 ---28)= 14次

         第三次 (14 - 1) + 29  = 42   碎了的话 最多也是跑上1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值