zoukankan      html  css  js  c++  java
  • 二进制神题--一千个苹果问题

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

    现在有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瓶有毒。

  • 相关阅读:
    java四种线程池类型以及可选择的阻塞队列
    复习-java向上转型
    synchronized 加在方法和代码块底层实现区别
    synchronized 和 lock 的区别
    hashmap-put方法过程
    mybatis-防止sql注入
    synchronized-粗略过程
    消息队列-观察者模式和发布订阅模式区别
    复习-进程的调度算法
    Chocolatey
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/5475862.html
Copyright © 2011-2022 走看看