微博里很热的1000瓶子10小白鼠找毒药问题

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

原帖地址:

http://www.zhihu.com/question/19676641

提示:使用伟大的二进制

从1000个瓶子跟10个老鼠这里直觉就是会跟2的10次方有关系
也学是学计算机的对二进制比较熟悉吧
联想到要用10这个数字来构造1000种可能而 2的10次方=1024>1000
而且每条老鼠的结果就两种可能被毒死而没被毒死
这个问题就把十个老鼠当作十个二进制的位,十位二进制能表示的数字个数是1024个,所以即使瓶子数量是1024也是可以找出来结果的,具体办法就是把一千个瓶子标上序号(先拿出来一瓶,剩下的瓶子从1开始编号),假设 是编号为n的有毒 比如n是 512那么 写成二进制就是1000000000,现在让你找这个序号是多少,相当于让你确定这个十位的二进制数每一位的数字是什么(此时你并不知道是512),so 我们先来确定第一位,我们使用正向确定法,就是确定这位是不是1(反向推测就是确定这位是不是0),怎么确定呢,我们先找到这一位是1的所有的数值,然后把这些数值对应的瓶子里面的液体取出来混合,(此时一就是512一直到99)让第一个老鼠喝掉,然后第二位,第三位.....依次类推到最后一位。最后十个老鼠都喝了瓶子的液体,一周后,哪个老鼠死了那一位就是1,得到一个十位的二进制数字,转换成十进制就搞定了,比如我们之前举的例子是编号512这瓶,那么肯定就是只有第一个老鼠死了,得到结果是1000000000

(如果任何老鼠都没有死即结果是0000000000 ,就是说明我们拿出来的那瓶是毒药)



附上1000苹果问题的一点解答的想法


题目】 1000个苹果放入10个箱子。客户如果要获得1~1000个苹果中的任意个数,都可以整箱搬,而不用拆开箱子。问是否有这样的装箱方法?
你说的1000苹果是这个问题吧?


这个题目直观多了
其实这个跟我们学的那个什么信息安全里面的某些问题到时有异曲同工之妙,也跟之前那个金条分三段发七天工资的问题差不多 
这个相对于找毒药问题比较简单,首先即使你不懂也能有思路,首先1肯定得有因为它不可能得于任何自然数的和之后你发现2也不能如果你分两个箱子为1岂不是很浪费so 你有了1 2 你就有了 3 so 你应该发现点规律了吧 不行的话你继续 分一个4 1 2 4 你能组合小于8的任何数 
so 你应该明白了吧 其实 1 2 4 8 16 这种数是可以构造任意数值的 因为 你首先知道 二进制 是可以表示任何整数的 
二进制每一位都是对应前面的1 2 4 8 所以你有了1 2 4 8 16 就相当于 你有了 这几位的二进制 当客户提出一个整数的时候你就把他转化成 
二进制比如客户想要127个 也就是 1111111 那你就取 1 2 4 8 16 32 64的箱子给他 就行了


原文地址:http://bbs.pediy.com/showthread.php?t=148657

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值