老鼠试药问题
来源:互联网 发布:邻里中国网php面试题 编辑:程序博客网 时间:2024/05/16 07:49
2.给每个老鼠编号,c1、c2、…c10分别给十只老鼠编号,
编号c1的老鼠只喝w1位上为1的药水瓶,编号c2的老鼠只喝w2位上为1的药水瓶,依次类推。
简化一下:如果只有8瓶,至少需要几只老鼠???
药水瓶编号是000 001 010 011 100 101 110 111,
三位二进制w1、w2、w3
三只老鼠是c1、c2、c3,
老鼠c1、c2、c3与三位二进制w1、w2、w3一一对应
c3喝: 100 101 110 111(右数第三位是1的都喝)
c2喝: 010 011 110 111(右数第二位是1的都喝)
c3喝: 001 011 101 111(右数第一位是1的都喝)
最后假设c3死了c2c1正常,那么100是毒药
假设c3c2死了,那么110是毒药
如果c1,c2,c3均没死,那么毒药的二进制编号为000
类推,哪只老鼠死对应位上就是1,没死为0,得出的结果就是毒药瓶编号
再将此问题稍作一点改变:
问:
32瓶液体,1瓶有毒,老鼠喝了1小时死亡,用1小时确定至少30个瓶子无毒,至少需要多少老鼠?
同上面的解法类似,我们只需要计算2的多少次幂是32,也就是说,最少5只老鼠可以确定32瓶液体中,哪一瓶是毒药。
可是问题要求的是:至少30瓶无毒。
对于这个问题,仍按照上面的解法,只需4只老鼠就可以了。
把32瓶药水两两绑在一起,变成了16大瓶。
将16瓶药水编号:0000
老鼠c1喝:1000 1001 1010 1011 1100 1101 1110 1111
老鼠c2喝:0100 0101 0110 0111 1100 1101 1110 1111
老鼠c3喝:0010
老鼠c4喝:0001 0011 0101 0111 1001 1011 1110
一小时后,如果有老鼠死了,则把对应位置填1,没死则填0,这样可以在一个小时后,得到一个二进制数。在确定下一瓶液体有毒后,就可以确定其他30瓶无毒了,完成目标。如果没有任何老鼠死亡,则编号0000液体有毒,剩下30 瓶无毒,完成目标。
- 老鼠试药问题
- 老鼠试药
- 老鼠试药——二进制算法
- 小白鼠试药问题。
- 小白鼠试药问题
- 小白鼠试药问题
- 海明码_小白鼠试药问题
- 海明码_小白鼠试药问题
- 猫吃老鼠问题
- 猫吃老鼠问题
- 老鼠与毒药问题
- 猫吃老鼠问题
- 毒酒老鼠问题
- 老鼠走迷宫问题
- 老鼠毒药问题
- 老鼠喝药问题
- 老鼠试毒瓶问题
- 老鼠毒药问题
- 第一篇 理解PHP设计模式
- Android 开发使用String 类替换Html中字段问题
- 数据库三大范式以及各种键值
- python--leetcode226. Invert Binary Tree
- linux中设定系统延时任务及定时任务
- 老鼠试药问题
- 前端学习第六弹:制作一个简易导航
- [JZOJ2393]【ZJOI2011】营救皮卡丘
- shiro cookie
- tensorflow 学习笔记之 变量的一些操作
- HDU
- 第10周项目实践 线索二叉树的建立及遍历
- Hbase命令
- SpringMVC(1)----@RequestParam和@PathVariable用法小结