网上闲逛,看到一算法题大体如下:
有一幢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