【智力题】:毒酒问题

有十杯酒,其中一杯有毒,现在要使用尽可能少的鸭子数量去找出哪杯酒有毒,已知毒性在一天之后才能发作,并且一天之后就要得到结果,问最少需要几只鸭子?

 十杯酒,对应的二进制编码为1010,共四位,所以最少需要四只鸭子即可

分析过程:

 第一步:对十杯酒编号                                                                          

                                                                                                                                                     

第二步:对四只鸭子进行编号

                                                                                                                                                            表二

鸭子编号                            对应的二进制编号
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0

第三步: 二进制编号的鸭子去喝二进制编号对应位为1的酒杯,即让鸭子的二进制编号与酒杯的二进制编号做与运算,若结果等于1,则让这一只鸭子喝掉这一杯酒。

eg:     

扫描二维码关注公众号,回复: 12918073 查看本文章

鸭子①:   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有毒

·······

猜你喜欢

转载自blog.csdn.net/qq_44292334/article/details/111350253