用小白鼠鉴别有毒药水问题
来源:互联网 发布:在线提醒软件 编辑:程序博客网 时间:2024/05/01 11:27
题设:有N瓶水,其中有一瓶水有剧毒,如果小白鼠喝了会在24小时的时候死亡。
问:用多少只小白鼠能够检测出哪瓶水有剧毒?
要求:用的小白鼠数量少并且用时要短,并给出合理的过程与结论。
我的解题思路如下:
这是一个二进制开关(0/1)问题,类比于海明码校验算法,将药水进行二进制编号(0000000,0000001,0000010,0000011...),算出至少多少位二进制能够将所有的小白鼠进行完全编号;
然后根据二进制的位数选取小白鼠,将小白鼠对应于相应二进制位,之后去依次遍历不同小白鼠的相同位,如果此位为1则喝下一点此瓶的药水,此位为0则不喝(至于怎么喝不是我们考虑的范围内,可以先按位进行药水的混合,放到其他的瓶中,再让小白鼠去喝混合后的药水,当然混合后的药水数量与选取小白鼠数量是相同的);
最后通过小白鼠的死活去鉴定哪瓶药水有剧毒。
类比实例分析:
1) 假设共有6瓶药水,其中1瓶有剧毒,其他无毒
2) 通过计算 2^3 = 8 >= 6,可知3位二进制数可以完全对所有药水瓶进行编号,因此我们要选取3只小白鼠做实验
3) 对药水瓶进行二进制编号,并且让小白鼠按位去喝药水(遇见1喝,遇见0不喝),示意图如下所示:
小白鼠
二进制码
水瓶编号
A
B
C
0
0
0
0
1
0
0
1
2
0
1
0
3
0
1
1
4
1
0
0
5
1
0
1
然后让小白鼠A去喝编号为4、5瓶中的水;小白鼠B去喝编号为2、3瓶中的水;小白鼠C去喝编号为1、3、5瓶中的水
如果小白鼠A、B、C都没死(000),则编号为0的水瓶中的水有剧毒;
如果小白鼠A、B没死,C死(001),则编号为1的水瓶中的水有剧毒;
如果小白鼠A、C没死,B死(010),则编号为2的水瓶中的水有剧毒;
如果小白鼠A没死,B、C死(011),则编号为3的水瓶中的水有剧毒;
如果小白鼠A死,B、C没死(100),则编号为4的水瓶中的水有剧毒;
如果小白鼠A、C死,B没死(101),则编号为5的水瓶中的水有剧毒;
(实质上:我们可以保持小白鼠的位置不变,给没死的小白鼠贴上标签0,死的贴上标签1,会得出一串二进制码,在将此段二进制码转换成为十进制,即得出有剧毒水瓶的编号)
4) 随着水瓶数量N的增加,我们通过 2^M >= N 计算出所需要的小白鼠的数量M即可
- 用小白鼠鉴别有毒药水问题
- 用小白鼠鉴别有毒药水问题
- 有1000瓶药水,其中只有一瓶有毒。现在用小白鼠进行实验,小白鼠只要服用任意量有毒药水就会在24小时内死亡。问至少要用多少只小白鼠进行实验才能检测出哪瓶药水有毒?
- 小白鼠验证毒药水的问题
- 现有8种药水,其中有且仅有一种有毒,药水24小时见效,现在要求在24小时内找出有毒药水,需要至少几只小白鼠?
- 8种药水有且仅有一种有毒,药水1小时见效,现在要求在1小时内找出有毒药水,至少需要几只小白鼠?
- 关于10只狗测1000瓶药水有毒无毒的问题
- 有毒酒水鉴别
- [二进制]1000桶药,有一桶有毒,用多少小白鼠测试
- 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
- 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
- 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
- 1000个瓶子 用最小数量的小白鼠确定其中有一瓶有毒
- 用10只小白鼠找出1000瓶液体中有毒的一瓶
- 小白鼠问题
- 美国宣布转基因有毒,鉴别有方
- [转载]小白鼠喝药水找毒药——面试题
- 1000瓶试剂,其中一瓶有毒,最少需要多少只小白鼠能找出有毒的试剂
- 将数组中指定的前N位移动到数组的最后面
- RMAN-03009 & ORA-17628
- 使用gfortran将数据写成Grads格式的代码示例
- 已知一个整数N,求另外一个整数M,使得M本身 + M各个位上的数 = N
- Linux vim 设置
- 用小白鼠鉴别有毒药水问题
- "sqlite3 not found"
- 自写strstr函数
- NO.4 使用预处理器进行调试
- java代码性能优化
- JS微信打飞机游戏(二)
- 【HDOJ】1234 -> 开门人和关门人
- hdu 3535
- SGU 180 Inversions