有十杯酒,其中一杯有毒,现在要使用尽可能少的鸭子数量去找出哪杯酒有毒,已知毒性在一天之后才能发作,并且一天之后就要得到结果,问最少需要几只鸭子?
十杯酒,对应的二进制编码为1010,共四位,所以最少需要四只鸭子即可
分析过程:
第一步:对十杯酒编号
第二步:对四只鸭子进行编号
表二
鸭子编号 | 对应的二进制编号 | |||
① | 0 | 0 | 0 | 1 |
② | 0 | 0 | 1 | 0 |
③ | 0 | 1 | 0 | 0 |
④ | 1 | 0 | 0 | 0 |
第三步: 二进制编号的鸭子去喝二进制编号对应位为1的酒杯,即让鸭子的二进制编号与酒杯的二进制编号做与运算,若结果等于1,则让这一只鸭子喝掉这一杯酒。
eg:
鸭子①: 0001 & 酒杯1 :0001==1 喝掉
鸭子①: 0001 & 酒杯2: 0010==0 不喝
鸭子①: 0001 & 酒杯3: 0011==1 喝掉
鸭子①: 0001 & 酒杯4: 0100==0 不喝
鸭子①: 0001 & 酒杯5: 0101==1 喝掉
鸭子①: 0001 & 酒杯6: 0110==0 不喝
鸭子①: 0001 & 酒杯7: 0111==1 喝掉
鸭子①: 0001 & 酒杯8: 1000==0 不喝
鸭子①: 0001 & 酒杯9: 1001==1 喝掉
鸭子①: 0001 & 酒杯10: 1010==1 不喝
∴鸭子要喝掉 酒杯1,酒杯3,酒杯5,酒杯7,酒杯9
即鸭子①要喝掉表一中蓝色这一列中位为1 的酒杯
同理可得:
鸭子②喝掉黄色这一列中位为1 的酒杯
鸭子③喝掉绿色这一列中位为1 的酒杯
鸭子④喝掉红色这一列中位为1 的酒杯
表三
酒杯编号 | 鸭子 |
酒杯1 | ① |
酒杯2 | ② |
酒杯3 | ① ② |
酒杯4 | ④ |
酒杯5 | ① ③ |
酒杯6 | ② ④ |
酒杯7 | ① ② ③ |
酒杯8 | ④ |
酒杯9 | ① ④ |
酒杯10 | ② ④ |
第四步:观察第二天鸭子的状态,查表三,得结论
eg:
若只有鸭子①挂掉,其他的鸭子无恙,则说明酒杯1有毒
若只有鸭子① ② ③三只挂掉,气的鸭子无恙,则说明酒杯7有毒
·······