老鼠喝药问题的解法

今天又遇见一个有趣问题,有趣就会分享。

和往常一样,当然是我自认为这个题目有意思,有研究的价值。题目如下:

“32瓶液体,1瓶有毒,老鼠喝了1小时死亡,用1小时确定至少30个瓶子无毒,至少需要多少老鼠。”

我的解法如下:

又是一个求最优解的问题。这个问题需要把一个老鼠能使用的信息用到极致,即能达到最优解。首先假设n个老鼠最多可以很明确地确定f(n)瓶液体中的那瓶毒药。

那么

1、对于这n个老鼠,每个老鼠各自喝一瓶液体,可以确定C(n,1)瓶液体中的唯一一瓶毒药。

2、在1所能确定的数目基础上,将n个老鼠两两组合后,每个组合各喝一瓶液体,则有C(n,2)种组合,可以多确定C(n,2)瓶液体。

3、在1、2所能确定的数目基础上,将n个老鼠三三组合后,每个组合各喝一瓶液体,则有C(n,3)种组合,可以多确定C(n,3)瓶液体。

……

n、在[1,n-1]所能确定的数目基础上,所有n个老鼠喝一瓶液体,则有C(n,n)种组合,可以多确定C(n,n)瓶液体。

那么,f(n) = C(n,1) + C(n,2) + ...... + C(n,n) = 2^n;

已知,f(n) = 32, 解得n = 5。

也就是说,最少5只老鼠可以确定32瓶液体中,哪一瓶是毒药。(注意,这里是明确确定了毒药所在)

但问题要求的仅仅是:”至少30个瓶子无毒“。

对于这个问题,并按照上面的解法,仅仅需要4只老鼠即可。并按照上面的过程,给出具体过程如下:

4只老鼠一字排开  并且把32瓶液体,两两绑定在一起,则变成了16大瓶。
第1大瓶液体, 二进制0001 ,给第1个老鼠喝    (4个老鼠,对应4个位置,给对应位置为1的老鼠喝)
第2大瓶液体,二进制0010  给第2个老鼠喝
第3大瓶液体,二进制0011  给第1、2个老鼠喝

......

第15大瓶液体,二进制1111  给第1、2、3、4个老鼠喝
第16大瓶液体(可以理解成第0瓶液体,对应于二进制 0000),不给任何老鼠喝。

一个小时后,如果有老鼠死了,则把对应的位置填1,没死则填0,这样可以在一小时后,得出一个二进制数值,这个二进制数值,可以一一对应于上面的方式,找到对应的液体。

例如,第1、2个老鼠死了,3、4号老鼠没死。得到二进制数为 0011,对应第3大瓶液体有毒。这样确定了其它30瓶液体是无毒的,完成目标。

再如:没有任何老鼠死亡,得到二进制数 0000,即第16大瓶液体有毒。剩下其它的30瓶液体无毒,完成目标。

这个题和上一篇《丢鸡蛋问题的解法》一样,都是用了数学思维对题目进行分析、并在先得到最终答案后,反推出具体解题过程。分享的并不仅仅是某个具体问题的解法,而是想向各位说明一类问题的解题思路。

谢谢大家看到最后,本人水平有限,如有失误之处欢迎指点。本人邮箱 [email protected]

老鼠喝药问题的解法,布布扣,bubuko.com

时间: 2024-08-11 05:31:21

老鼠喝药问题的解法的相关文章

用最少老鼠数找出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

称药问题(外一篇:毒酒问题)

问题一:现在有10瓶药,合格的药每颗10克,但是有1瓶中的药不合格,每颗9克.问:称1次如何辨别哪瓶是不合格的? 答:将药瓶编号1,2,3...10,分别从中取1颗.2颗.3颗...10颗.共计55颗,用称称重,如果是正常的话,重量应为550克.如果比550克少1克,则是1号瓶不合格.如果少2克,则2号瓶不合格,依此类推. 问题二:现在有10瓶药,合格的药每颗10克,但是有其中的某几瓶中的药不合格,每颗9克.问:称1次如何辨别哪瓶是不合格的? 答:不能用问题一的解法,如果比550克少6克,那么可

7只老鼠测试100个瓶子

起源 今天,休息的时候同事虎哥给我们说了一个很有意思的问题:有100个瓶子,瓶子里面乘着水,其中有一个瓶子里面的水是有毒的.还有七只老鼠,老鼠喝了有毒的水,七天会死掉.现在给你七天的时间,然后让你用这七只老鼠将这些瓶子里面有毒的那个瓶子测试出来,怎么做? 据说这个问题是某个比较大的公司的一个面试题.对这个问题很感兴趣的,于是,下班回家后就开始研究这个问题,想到了现在(除去中间打了一把红警的时间)终于想出来了,跟大家分享下. 思路 思路一: 对于这个问题,我的第一个思路是这样的(这个思路我没有走通

c语言:1000瓶水,有一瓶是有毒的,现共有10只老鼠,怎么判断毒水?

问题:1000瓶水,其中有一瓶是有毒的,一只老鼠喝下毒水会一天之后死亡,现在共有10只老鼠,怎么判断哪一瓶水是毒水? 分析:2^10=1024,则可以考虑利用二进制求解 解:给1000瓶水依次标号1至1000,将10只老鼠从右向左排成一列,第一瓶水让右边第1只老鼠喝,第2瓶水让第2只老鼠喝,第3瓶水让第1,2只老鼠喝,则第4瓶水让第3只老鼠喝,......第1000瓶水依次让第4,6,7,8,9,10只老鼠喝,记死亡的老鼠为1,未死亡的老鼠为0,按照二进制表示数的方法求出这个数,就知道哪瓶是毒水

老鼠试毒 两轮试验

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

老鼠毒药问题和它的扩展

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

药方大而全,无法调节人体的阴阳平衡--滋阴药寒凉药误用的危害(转载)

本文内容转载自<教您认识中医与中医养生>,标题为根据内容自拟. 带你认识中医(36)现代中医的没落2滋阴派横行 记得曾经有一个肿瘤医院实习的中医研究生发了一条微博,说看着一个个病人高兴的来,治疗了一年多以后黯淡地去世,在这个过程中,他根本不知道中医在其中起了什么的作用,根本无法减轻病人的痛苦.这是一个读到研究生的中医对自己学习中医的质疑,也是一个有良心医生对疗效的反思.可惜就可惜在,他从学校开始,就被传到错误的观念,加上师资质量的问题,导致他无法学到真正的中医.但这无法浇灭他学习中医的热情,他

一些数据结构的思想(2)

1000瓶水中找 出有毒的那瓶,毒性一周后发作,一周内最少需要多少只老鼠 这个题是对bit位的应用,1000接近1024,所以需要10个bit位,对瓶子进行编号,从0到999,这样需要10只老鼠.瓶子的编号分别为: 00000,00000 00000,00001 00000,00010 00000,00011 00000,00101 00000,00111 ...... 11111,00111 同时给老鼠编号,从1,2,...10,从低位开始,让第n个老鼠喝下第n个bit位为1瓶子中的药水.一周