八股文智力题
猴子搬香蕉
问题:一个小猴子有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。
提示:他可以把香蕉放下往返的走,但是必须保证它每走一米都能有香蕉吃。例如可以走到n米时,放下一些香蕉,拿着n根香蕉走回去重新搬50根。
思路:猴子搬箱子的过程其实分为两个阶段
- 第一阶段:来回搬,当香蕉数目大于50根时,每走一米需要吃掉三根香蕉。
- 第二阶段:香蕉数 <= 50,直接搬回去,每走一米吃掉1根。
假设把100根香蕉分为两箱,一箱50根
- 第一步,把A箱搬一米,吃一根
- 第二步,往回走一米,吃一根
- 第三步,把B箱搬一米,吃一根
这样,把所有香蕉搬走一米需要吃掉三根香蕉,那么走到第几米时,香蕉数 <= 50 呢?
走到16米的时候,吃掉48根香蕉,剩52根香蕉
- 选择一:可以直接搬起50根,距离34m走到终点,最终剩余16根
- 选择二:可以再来回搬一次,到17米的时候,猴子还有49根香蕉,此时距离终点33m,最终剩余16根
因此答案为 16根
白鼠找毒药
问题:1000瓶药水,1瓶有毒药,最少需要几只小白鼠找出毒药?答案是10只,我们先将问题的范围缩小,寻找规律
8瓶药水,需要3只小白鼠,即 log2^8 = 3只小白鼠
同理,16瓶药水,会需要log2^16 = 4只小白鼠故,1000瓶药水,会需要log2^1000 = 10只小白鼠