二进制神题--一千个苹果问题

今晚翻出了之前收藏的一个有趣的问题--一千个苹果的分装:

现在有1000个苹果,和10个箱子,如何把这1000个苹果装在这10个箱子里,才能使不管任何数量(1-1000)的苹果,都能一次给出?

典型的二进制数变种,1000个苹果,最接近1024,转化为2进制,需要占用10个bit,则从右往左数,第一个bit位表示1个苹果,第二个bit位表示2个苹果,第三个bit位表示4个苹果,,,第10个bit位表示488个苹果(512-24)。分别把这些通过放入相同编号的箱子里。当需要某一数量的苹果时,查看这些数量的哪些bit位为1,为1则表示这个bit位代表有苹果,取出对应编号的箱子即可。

 

还有其他博友那淘来的毒药问题,异曲同工:

有8瓶液体,其中一瓶是毒药,毒性可使小白鼠饮用后在20小时内阵亡,需要几只小白鼠才能在20小时内判断哪一瓶是毒药?

分析:

给8瓶毒药编码:

第一瓶:000

第二瓶:001

第三瓶:010

第四瓶:011

第五瓶:100

第六平:101

第七平:110

第八平:111

只需3只小老鼠

第一只老鼠喝最后bit位为1的,即第2,4,6,8瓶

第二只老鼠喝中间bit位为1的,即第3,4,7,8瓶

第三只老鼠喝第一bit位为1的,即第5,6,7,8瓶

如果20小时候,没有老鼠死亡,则第一瓶有毒,否则:

假设第二只和第三只老鼠死亡,把对应位上bit设为1,即110,所以第7瓶有毒。

posted @ 2016-05-09 23:01  Kiven#5197  阅读(1222)  评论(0编辑  收藏  举报