zoukankan      html  css  js  c++  java
  • 经典智力题

    1、1000瓶毒药要至少多少只老鼠,假设每只老鼠吃了药之后,如果中毒会24小时内毒发而死,才能找出具体的哪一瓶?

    答案是至少10只,需要将药混合起来,需要喂一轮。

    题解

    位运算,每一只老鼠都可以当做一个二进位,代表0和1,0代表老鼠没事,1代表老鼠死了

    根据2^10=1024,所以至少10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。

    为了更好的表达原理,将题目整体缩小为如何用3只老鼠确定8个瓶子(2^3 = 8)。

    一位表示一个老鼠,0-7表示8个瓶子。例如5号瓶子,对应是101,那就是老鼠1和老鼠3都得吃,4号瓶子对应是100,也就是只让老鼠3吃。

    映射关系:
    000 = 0
    001 = 1
    010 = 2
    011 = 3
    100 = 4
    101 = 5
    110 = 6
    111 = 7
    

    每一位就表示一个老鼠,右侧的0-7表示8个瓶子。

    例如5号瓶子,对应是101,那就是老鼠1和老鼠3都得吃;4号瓶子对应是100,也就是只让老鼠3吃。

    根据这个逻辑:分别将1、3、5、7号瓶子的药混起来给老鼠1吃,2、3、6、7号瓶子的药混起来给老鼠2吃,

    4、5、6、7号瓶子的药混起来给老鼠3吃,哪一只老鼠死了,相应的位置就为1。

    现在对某瓶未知序号的毒药,如果出现了情况是老鼠1死了、老鼠2没死、老鼠3死了,这就是101情况对应5号瓶子,那么就是101=5号瓶子有毒。

    按照这个原理,10个老鼠也就可以确定1000个瓶子了。


    2、明天晚上21:00的宴会需要9瓶酒,酒窖里现有17瓶酒,其中有一瓶混入了慢性毒药,只对人和老鼠有影响,吃了以后,无药可医,但需且仅需24小时发作。现在是晚上19:00,请问至少需要多少只老鼠才能选出宴会用的酒?

    题解

    晚上19点到第二晚21点,还有26小时时间,24小时毒发可以允许还有两个小时可操作,即所有操作要在今晚21点前完成:

    情况一:严格24小时准时毒发而死

    一只老鼠,每隔几分钟就按顺序吃一瓶酒,那到了明天晚上19点开始观察老鼠的死亡时间,就能反推出最初是哪一瓶酒是带毒的了。

    情况二:大约24小时才会毒发而死

    给17瓶酒分别从1编号到17,然后分成两组:

    1组是1-9编号的酒共9瓶,

    2组是10-17编号的酒外加上从1-9编号中的任意一瓶酒,共9瓶,

    则共需要两只老鼠试喝2组中的酒,

    则可能发生的结果为:

    1. 喝1组酒的老鼠死亡,则宴会用2组的9瓶酒

    2. 喝2组酒的老鼠死亡,则宴会用1组的9瓶酒

    3. 2只老鼠都死亡,则说明从1-9中拿出的那瓶酒是毒酒,则宴会使用剩余16瓶中的任意9瓶

    情况二原理就是二分法,哪一组没出事就用那一组。

  • 相关阅读:
    Promise.all和Promise.race区别,和使用场景
    使用Promise解决多层异步调用的简单学习【转】
    前端性能优化-缓存
    Node.js机制及原理理解初步【转】
    微信小程序 canvas 字体自动换行(支持换行符)
    百度地图-鼠标悬停样式
    文件I/O相关函数
    获取系统限制信息
    标准C头文件
    数据库系统小结:(不包括详细知识点,更像一个大纲)
  • 原文地址:https://www.cnblogs.com/DMingO/p/14404162.html
Copyright © 2011-2022 走看看