鉴别毒水问题

来源:互联网 发布:jre windows x64.exe 编辑:程序博客网 时间:2024/05/16 23:53

一、有1000瓶水,其中有一瓶有剧毒(假设哪怕一个毒药分子在里面也能致命),现在给你10只小狗在24小时内通过小狗试药的方式鉴定出来哪瓶药有毒。
情况1:假设小狗服药后2小时内即可判断是否中毒,鉴别方案有哪些?
情况2:假设小狗服药之后20小时才能判断是否中毒,鉴别方案又是什么?

对与情况1,由于要求24小时内得出结果,因此最多可以等待12次试验结果,因此可以采用简单的二分查找的方法找到有毒的水。

对于情况2,由于20小时后才能判断是否中毒,因此只能等待1次试验结果。这个问题的模型就是用10位二进制位可以表示1000(二进制表示111110100)内的一个数字.我们用8瓶水说明情况(要用3个小白鼠做实验哦)。

000=0
001=1
010=2
011=3
100=4
101=5
110=6
111=7
一位表示一个老鼠,0-7表示8个瓶子。也就是分别将1、3、5、7号瓶子的药混起来给老鼠1吃,2、3、6、7号瓶子的药混起来给老鼠2吃,4、5、6、7号瓶子的药混起来给老鼠3吃,哪个老鼠死了,相应的位标为1。如老鼠1死了、老鼠2没死、老鼠3死了,那么就是101=5号瓶子有毒。   

 二、8瓶水中有2瓶有毒,会使小白鼠在24小时后死亡,给你6只小白鼠,怎样能在24小时后确定哪2瓶水有毒?

说个简单的办法 将8瓶水矩阵来摆 分别编号12345678


123
456
78
一二三老鼠 分别横向喝 即一老鼠喝123的混合 二老鼠喝456的混合 三老鼠喝78的混合
四五六老鼠 分别纵向喝 即四老鼠喝147的混合 五老鼠喝258的混合 六老鼠喝36的混合
24小时过后 死老鼠所对应的直线交点就是 两瓶毒药位置


关于毒药问题 还可以用二进制转化十进制的办法处理 但是那种比较适合在一瓶毒药情况下
用到的白鼠数量较少
但是用矩阵的办法可以无视毒药数量 完全检验出毒药

 

0 0