经典老鼠毒药问题

问题1. 有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

问题2. 有 8 个一模一样的瓶子,其中有 7 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 3 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

确定问题是否可以解决:

2^10=1024>1000
2^3=8>=8

瓶子数不超过2的老鼠数次幂,都是可以解决的

问题1解决思路:
1. 把1000瓶标号:1,2,3,4,5,6...1000.
2. 所有老鼠排列在一起组成一个2进制队列: 0000000000 0代表不喝,1代表喝
3. 0000000001代表第一瓶水被喝情况 0000000010代表第二瓶水被喝情况 0000000011代表第三瓶水被喝情况 0000000100代表第四瓶水被喝情况 ... 1111101000代表第1000瓶水被喝情况
4. 第7天,喝了毒药的老鼠都死了,那个二进制队列转为为十进制就是毒药的标号。比如第3只老鼠死亡,其他老鼠没死,队列为0000000100,第四瓶水有毒。第1,5,6,8老鼠死亡,其他没死,队列为0010110001,第177瓶水有毒。

问题2解决思路:
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号瓶子有毒。

时间: 2024-10-14 00:50:39

经典老鼠毒药问题的相关文章

老鼠毒药问题和它的扩展

这是一个传播得很广的问题:有1000瓶液体.当中一瓶是毒药.其它的都是清水.毒药看上去和水一样.仅仅能用老鼠来试验.老鼠在喝了毒药以后一个星期后一天内的随意时刻死亡. 最少须要多少仅仅老鼠才干找到毒药? n瓶液体其中一瓶有毒,总共同拥有n种可能性,用集合N来表示. 一仅仅老鼠的生死能够用0.1表示. r仅仅老鼠的生死构成了一个0.1串,这个0.1串能够表示2的r次方中结果,用集合R表示. 我们就是要找一个实验方法,通过这些老鼠的生死获取毒药的编号. 假设做个抽象,这个实验方法是F.F把N中元素分

老鼠毒药问题

这是一个传播得非常广的问题:有1000瓶液体,其中一瓶是毒药,其他的都是清水.毒药看上去和水一样,只能用老鼠来试验.老鼠在喝了毒药以后一个星期后一天内的任意时刻死亡.最少需要多少只老鼠才能找到毒药? n瓶液体当中一瓶有毒,总共有n种可能,用集合N表示.一只老鼠的试验以后的生死可以用0.1表示,r只老鼠的生死是一个0.1串,总共有2的r次方中结果,用集合R表示. 我们要找到一个实验方法f,把N中元素分别映射到R上.并且N中的两个元素不能对应R中的同一个元素. 也就是说,第1瓶有毒和第2瓶有毒这两种

十只老鼠和一千瓶毒药的故事。。。

问题描述:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药. 任何喝下毒药的生命都会在一星期之后死亡.现在你只有10只小白鼠和1个星期的时间,如何检验出哪个瓶子有毒药? 解答: 根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒.具体实现跟3个老鼠确定8个瓶子原理一样.000=0001=1010=2011=3100=4101=5110=6111=7一位表示一个老鼠,0-7表示8个瓶子.也就是分别将1.3.5.7号瓶子的药混起来给老鼠1吃,2.3.6.7

[数学问题]毒药和老鼠的研究[转]

转自:http://www.cnblogs.com/icyJ/p/Mouse_Poison.html 基础: 1.整数的二进制表达式 1000/2=500 --(余)--0 500/2=250 --(余)--0 250/2=125 --(余)--0 125/2=62 --(余)--1 62/2=31 --(余)--0 31/2=15 --(余)--1 15/2=7 --(余)--1 7/2=3 --(余)--1 3/2=1 --(余)--1 1/2=0 --(余)--1 1000的二进制表达式为

【每天进步一点】毒药和老鼠的研究

之前碰到过毒药和老鼠,鸡蛋和称的问题,每次都拿笔在纸上推敲很久,这类问题今天终于有了完整的解决思路. 基础: 1.整数的二进制表达式 1000的二进制表达式是什么呢? 1000/2=500 --(余)--0 500/2=250 --(余)--0 250/2=125 --(余)--0 125/2=62 --(余)--1 62/2=31 --(余)--0 31/2=15 --(余)--1 15/2=7 --(余)--1 7/2=3 --(余)--1 3/2=1 --(余)--1 1/2=0 --(余

用最少老鼠数找出7瓶药中的1瓶毒药

原文链接:https://www.jianshu.com/p/607d6683748b https://blog.csdn.net/limitless1113/article/details/46681851 题目如下:现有7瓶药,其中有一瓶毒药,喝了之后1小时后才产生效果,现在你有1个小时的时间,请问找出那瓶毒药最少需要多少只老鼠? 现在有3只老鼠,那么我们以老鼠的死和排序作为一瓶药的编号.例如: 001 代表第一瓶药 010代表第二瓶药 011代表第三瓶药 100.101.110.111一次

问题:有1000杯水,其中有一杯是毒水,现在需要从中找出含毒药的水,可以用老鼠来实验;老鼠如果喝了有毒的水,一个小时内必死,请问如何安排试验,能够用最少的实验材料在一个小时内检测出有毒的水?

对于每一杯水,我们可以选择让哪些老鼠喝,哪些老鼠不喝,将10个老鼠编号,就可以将老鼠们的喝与不喝的情况转化成二进制,比如1号鼠和3号鼠喝,那二进制就是0000000101,那我们可以用这个二进制标识一杯水,因为2的10次方是1024,因此每杯水的二进制都可以不一样.一个小时内,喝了有毒的水的老鼠必死,根据死亡情况和老鼠的编号就判断出哪一杯水有毒,比如1号鼠和3号鼠死了,那有毒的那杯水的二进制编码就是0000000101. 原文地址:https://www.cnblogs.com/catpaint

老鼠试毒 两轮试验

大家应该都听说过这个老题目:有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药.任何喝下毒药的生物都会在一星期之后死亡.现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药? 这个问题的答案也堪称经典:把瓶子从 0 到 999 依次编号,然后全部转换为 10 位二进制数.让第一只老鼠喝掉1到1000所有二进制数右起第一位是 1 的瓶子,让第二只老鼠喝掉所有二进制数右起第二位是 1 的瓶子,等等.一星期后,如果第一只老鼠死了,就知道毒药瓶子的二进制编号中,

数据结构与算法4: 经典问题之迷宫问题(Maze path)

数据结构与算法4: 经典问题之迷宫问题(Maze path) 写在前面 本节实践了教材[1][2]的两种经典迷宫算法.注意体会栈的运用.如果有改进意见请帮助我. 1.迷宫问题直观感受 下面给出迷宫问题的一个直观感受图,引入图只是为了帮助直观理解,这里不涉及OpenGL等其他绘图内容. 下图中棕色代表通道阻塞,白色代表可用通道,红色代表起始位置,绿色代表当前位置,黄色代表出口. (采用C++ 和OpenGL 绘制,目前是2D版本,3D版本有空时再补上) 迷宫1: 迷宫2: 2.迷宫算法 2.1 迷