小白鼠检测液体
来源:互联网 发布:那英 唱功 知乎 编辑:程序博客网 时间:2024/04/28 05:54
本文地址: http://blog.csdn.net/hftenger/article/details/7600764
Q: 我们有很多瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。现在有5只小白鼠,请问一下,我们用这五只小白鼠,5分钟的时间,能够检测多少瓶液体的成分?
A: 实际上题目出的不太严谨,我们假设总共有N瓶液体,以便下面进行展开。
1. 我们先来看一个更简单的情形,假设我们现在只有一只小白鼠:
这个时候我们还需要对N进行分类讨论:
1.1 如果N==2,小老鼠喝掉其中一瓶,最终死掉,则喝掉的有毒,另外一瓶无毒;反之,你懂的。所以一只小白鼠可以确定2瓶;
1.2 如果N==3,小老鼠有2种选择,要么喝掉一瓶,要么喝掉两瓶。喝掉一瓶死掉,那么可以确定3瓶,没死掉则只能确定1瓶;喝掉两瓶死掉,那么可以确定1瓶,没死掉则可确定2瓶。因此综合来看这个时候只能确定1瓶;
1.3 如果N>=4,这个时候可以确定[N/2](取整)瓶,只需把所有的瓶子分成两个部分,让这只小白鼠试喝其中一半,如果最终死掉,则可确定另一半无毒,如果没死,则可确定所喝的那一半无毒;
2. 现在更进一步,假设我们现在有2只小白鼠:
需要注意到的一个地方是,两只老鼠可以给我们展示出2^2=4种状态。我们假设小白鼠分别为A, B, 喝完死掉与没死分别为0,1。四种状态分别是
A0B0 A1B0 A0B1 A1B1
同样得,2只老鼠实际上也只能对4瓶水p1, p2, p3,p4产生不同的喝法:
0 0 p1
1 0 p2
0 1 p3
1 1 p4
----------------------
A B
其中1表示喝,0表示不喝。
下面开始展开:
同样,我们对N进行分类讨论,结合上面的讨论,如果N<4,那么两只老鼠完全可以把N瓶液体全部检测出来,你懂的,所以下面的讨论从N==4开始:
2.1 如果N==4,那么
A0B0 --> p1有毒
A1B0 --> p2有毒
A0B1 --> p3有毒
A1B1 --> p4有毒
计算方法可用下面的方法:
1*(0 OR 1) NULL = ?
NULL 1*(0OR 1) = ?
1*(0 OR 1) && 1*(0 OR 1) = ?
---------------------------------------------
A*(0 OR 1) B*(0OR 1)
?为1则有毒,为0则无毒,因为N==4的关系,如果3个都没毒,则剩下的必然就有毒了,所以A0B0-->p1有毒。
2.2 如果N==5,则我们可以将N分成4份(1瓶,1瓶,1瓶,2瓶),类似于2.1&1.2,假设p1,p2,p3,p4分别代表其中的4份。则我们可以确定出3*[N/4]瓶。
2.3 如果N==6,则我们可以将N分成4份(1瓶,1瓶,2瓶,2瓶),类似于2.1&1.2,假设p1,p2,p3,p4分别代表其中的4份。则我们可以确定出2*[N/4]+1*([N/4]+1)瓶。
2.4 如果N==7,则我们可以将N分成4份(1瓶,2瓶,2瓶,2瓶),类似于2.1&1.2,假设p1,p2,p3,p4分别代表其中的4份。则我们可以确定出1*[N/4]+2*([N/4]+1)瓶。
2.5 如果N==8,则我们可以将N分成4份(2瓶,2瓶,2瓶,2瓶),类似于2.1&1.2,假设p1,p2,p3,p4分别代表其中的4份。则我们可以确定出3*[N/4]瓶。
2.6 如果N==4*a+i (i=1,2,3,4), 则可确定3*[N/4]+t (i=1,4-->t=0; i=2-->t=1; i=3-->t=2)
(假设a为任意自然数,下同)
3. 推广到一般情形,假设有K只小白鼠,那么:
3.1 N==2^K,则可确定N瓶;
3.2 N==a*2^K+i(i=1,2,3,…,2^K-1,2^K),则可确定
(2^K-1)*[N/2^K]+t (i=1,2^K-->t=0; i=2-->t=1; …; i=2^K-1-->t=2^k-2)
总结一下,利用K只老鼠,至少可检测出max((2^K-1)*(N/2^K), N)瓶液体。
欢迎批评指正。多说一句,小白鼠还是太无辜了。。
- 小白鼠检测液体
- 小白鼠检测毒药问题
- 1000瓶液体10只小白鼠面试题答案
- 用10只小白鼠找出1000瓶液体中有毒的一瓶
- 小白鼠
- 液体酒
- 液体健康
- 小白鼠试药
- 小白鼠试药
- 小白鼠算法
- BIT1020 小白鼠
- 小白鼠问题
- 小白鼠排队
- 面试题:8个试剂,其中一个有毒,最少多少只小白鼠能检测出有毒试剂
- 液体包装机
- 1360 神奇的液体
- foj1081等分液体
- 全氢聚硅氮烷液体涂料材料
- MySql四舍五入
- source insight 快捷键
- printf输出多列时的列对齐
- 关联容器练笔
- 数据库表项的一对多关联设计
- 小白鼠检测液体
- 部署 .net mvc 到iis7 出现错误
- 如何写hibernate配置文件
- 专访苹果首席设计师 Ive: 苹果的简单不是简单
- IP头、TCP头、UDP头详解以及定义
- 初学面向对象写的一个上传类
- 用php写的一个很不错的验证码
- 数据仓库之拉链算法
- 求出excel里列的表示方法