1000桶酒

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

(老鼠的使用量越少越好,注意,毒性1周后才会发作,而且一周后必须出结果,所以时间紧迫)
分析:本题考查的是二进制编码问题。

如对1000桶按1~1000编码,需要10位二进制数。

因此只需要取10只老鼠,每只老鼠只喝其对应位数为1的编号的酒。

即10只老鼠按以下编码:

第一只 00000 00001

第二只 00000 00010

第三只 00000 00100

第四只 00000 01000

第十只 10000 00000
每只老鼠只喝其编码与酒编码做位与运算非0的酒。如果毒酒的编码在某一位为1,则监控该位的老鼠必喝,结果为1.

即把10只老鼠的结果,按位填入一个10位二进制数中,其结果即为毒酒编号。

例如:编号为10001 00011的酒是毒酒。则对应的只有第一只,第二只,第六只,第十只死亡。其对应位数置1,即为10001 00011

A,B两只老鼠,喝1,2,3,4桶酒, A,B都死了说明1桶酒有问题 , A,B都没死,说明第4桶有问题,B死了说明第2桶有毒,A死了说明第3桶有毒, 每只老鼠最多喝2桶记(2^2)/2 = 2
1 A B 00
2 B 01
3 A 10
4 11

A,B,C三只老鼠, 每只老鼠最多喝4桶,(2^3)/2 = 3
1 A B C
2 A B
3 A C
4 B C
5 A
6 B
7 C
8

所以依次类推,10只老鼠,每只最多喝(2^10)/2 = 512桶酒

延伸讲应该是如果一只老鼠喝512桶死了的话,那么剩下的521桶没毒,排除一半, 再用一只老鼠喝256桶,同理排除一半,依次类推,所以这里我想的是用到了分治的思想

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值