• 淘宝面试题:小白鼠与毒药


    http://www.itmian4.com/forum.php?mod=viewthread&tid=4412&extra=page%3D1看到的,红色字体是本人补充的。

    题目大意

    有很多瓶无色液体,它们中只有一瓶毒液,其余的全是蒸馏水。在外观上看,所有瓶子完全相同。小白鼠如果喝掉了有毒的液体,5 分钟之后死亡。

    现在手上有 5 个小白鼠,问 5 分钟之内,能准确的鉴别出多少瓶液体。有如下 4 个选项:

    A. 5     B. 6     C. 31    D. 32

    做法分析

    最容易想到的办法:5 只老鼠每人喝一瓶,于是能鉴别 5 瓶

    但是答案后面给的 31 和 32 是什么意思?再想想

    哦,是不是可以把瓶子中的液体混合着吃,然后根据 5 只老鼠的连锁反应鉴别液体?好像挺科学的样子

    5 只老鼠的连锁反应,总共有 2^5 种可能的情况,情况太多,不太好分析,我们从一只老鼠分析着走

    1 只老鼠:明显只能鉴别 1 瓶

    2 只老鼠

    两只老鼠的反应有:(活,活),(活,死),(死,活),(死,死)

    再考虑到:只有一个瓶子的液体有毒,怎么安排他们喝药才能准确鉴别毒药呢(蒸馏水直接无视掉)

    (活,死)和(死,活)的状态,肯定是一只老鼠喝了一瓶且仅仅是一瓶另一只老鼠没喝过的

    (死,死)这种状态,肯定是他们共同喝了一瓶且仅仅一瓶

    我们用 1 表示喝,0 表示不喝,那么,不难凑出如下的喝药策略:

      瓶子 1 瓶子 2 瓶子 3
    老鼠 1 1 1 0
    老鼠 2 1 0 1

    那么,现在得出结论:2 只老鼠能鉴别 3 瓶

    3 只老鼠

    三只老鼠的反应有:(活,活,活),(活,活,死),(活,死,活),(活,死,死),(死,活,活),(死,活,死),(死,死,活),(死,死,死)

    注:给3只老鼠分别编号为1、2、3号。

    共有1种这样的情况:  3只都死,表示他们必须喝过同一瓶;

    共有3种这样的情况:  2死1活,表示两死的必定喝过同一瓶;

    共有3种这样的情况:  1死2活,表示一死的肯定自己单独喝过一瓶别人没喝过的;

    共有1种这样的情况:  3只都活,表示不了什么,只能说明他们喝过的都没问题,但是毒液却没检测出来。

    综上所述:他们都喝过同一瓶子,+1;(即下面表格中的瓶子7)

         其中2只会喝同一瓶,+3;(即下面表格中的瓶子4、5、6)

         每一老鼠都独享一瓶,+3;(即下面的瓶子1、2、3)

    和两只老鼠一样的分析:每一只老鼠都喝过一瓶且仅仅一瓶其他老鼠没有喝过的液体,任意两只老鼠都喝过一瓶且仅仅一瓶第三只老鼠没有喝过的液体,三只老鼠共同喝过一瓶液体,那么不难得出如下的喝药策略:

      瓶子 1 瓶子 2 瓶子 3 瓶子 4 瓶子 5 瓶子 6 瓶子 7
    老鼠 1 1 0 0 1 1 0 1
    老鼠 2 0 1 0 1 0 1 1
    老鼠 3 0 0 1 0 1 1 1

    于是得出结论:3 只老鼠能鉴别 7 瓶

    到了这里,4,5 只老鼠的情形应该不用分析了吧,答案应该是:n 只老鼠能够鉴别 2^n - 1 瓶。(这是根据规律总结出来的,“情况:全活”证明不了什么,所以需要减去一瓶)

    这道题目的答案应该是 2^5 - 1,选择 C  (里面还能牵扯到数学的东西,不扎实,不多想了~)

  • 相关阅读:
    尤埃开放服务平台(OSGi.NET)带给您的价值
    用C#实现的条形码和二维码编码解码器
    php基本语法
    大型网站核心技术
    大型公司里开发和部署前端代码——引自前百度前端工程师
    Python基础 函数
    Python 循环
    Binary Agents
    Steamroller
    Drop it
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4227193.html
Copyright © 2020-2023  润新知