python毒酒检测_一道著名的毒酒问题

有1000 桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。现在我们用小老鼠做实验,要在1周后找出那桶毒酒,问最少需要多少老鼠。(老鼠越少越好,时间越快越好)

方法一:类推法

一只老鼠(①):

喝一剩一,最多检验2桶酒

① + Ο =2

两只老鼠(①和②):

两只老鼠各喝一桶,再一起喝另外的同一桶,最后剩下一桶都不喝,最多检验4桶酒

① + ② + ①② + Ο =4

三只老鼠(①、②、③):

三只老鼠各喝一桶,两两组合喝三桶,三个一起喝一桶,最后剩下一桶都不喝,最多检验8桶酒

① + ② + ③ + ①② + ①③ + ②③ + ①②③ + Ο =8

以此类推,发现规律——

每n只老鼠,能检验的酒桶数量满足:

$$

∑=1+n+C{_n^2}+C{_n^3}+...+C{_n^n}

$$

根据二项展开式定理:

$$

(a+b)^n=C(n,0)a^n+C(n,1)a^{n-1}b+...+C(n,i)a^{n-i}b^i+...+C(n,n)b^n

$$

上述结果等同于:2^n

所以可知当老鼠的数目n满足:2^n>=1000时,能够满足条件。可得出n>=10,即最小为10只。

方法二:二进制表示法

一只老鼠喝酒后又两种状态:死(0)和活(1).

所以10只老鼠就能表示2的10次方个状态(即1024个).2^0表示2的零次方.2^8表示2的8次方.

设有10只老鼠编号分别为2^0,2^1,2^2,2^3,2^4,2^5,2^6,2^7,2^8,2^9.有1000桶酒编号为1,2,3.一直到 1000.

任何一桶酒的编号都能分解为2的幂指数之和的形式,而且唯一.比如:第九桶酒 9= 2^0 + 2^3

(那么我们就让编号为2^0和 2^3的这两只老鼠去喝这桶酒)最后只要看哪几只老鼠死了就知道是哪桶酒有问题.(只要把死了的老鼠编号加起来就是酒桶的编号)

比如:

如果最后死掉第三、七、八只老鼠,那么就是0011000100,转换成十进制就是196,即196桶酒有毒。

如果是第3和第10只老鼠死掉,即是:1000000100,转换10进制为2^2+2^9=4+512=516桶酒有毒

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值