对于一道课本习题的理解与探究

新学期开始,在课本习题上看到一道这样的题:

有15瓶药水,其中一瓶有毒。假定一只小白鼠喝下药水后是否中毒需要一个小时才能体现出来。如果有4只小白鼠,是否有办法用一个小时的时间检测出有毒的药水?

其实以前也做过类似的题目,问法不相同,问的是至少需要多少只小白鼠才能确定有毒的药水。
题目的具体解法是对小白鼠进行编号,从1-15(而不是编程习惯0-14),然后使用二进制表示法对这些编号进行编码:

mousebinary code
10001
20010
30011
40100
50101
60110
70111
81000
91001
101010
111011
121100
131101
141110
151111

于是可以按照表格中二进制表示法中的每一列来配置药剂,一共四列,可以配置四管,“1”表示有,“0”表示没有。
四个杯子的混合药水分别给4个老鼠喝,就可以根据老鼠死亡的情况判定哪个瓶子药水有毒。用“1”表示老鼠死了,“0”表示老鼠没死。
比如第一个老鼠死了,第二个老鼠没死,第三个老鼠死了,第四个老输死了,就是1011,就是11号瓶子有毒。
能使用这种方法的原因是二进制的特点是逢二进一,因此对15个个体进行编号以及编码表示,二进制位只要4位,而且所有表示法并成一列的话,从横向看每一种表示都是不同的,因此可以进行区分。首先混合试剂的方法很容易想到,先定毒药为变量p,那么可以清楚的知道不加p老鼠就不会死(仅有一瓶毒药),因此老鼠如果死了一定加了p,对应的p的位置的试剂一定是“1”,不加p的老鼠不会死,因此没有死的老鼠喝的试剂对应的p的位置为“0”表示没有添加p。这样就可以确定到底是第几瓶药水杀死了老鼠

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值