1、二进制相关问题
第一题:有1000瓶药水,但其中有一瓶毒药水,需要多少只小白鼠?
第二题:快速分沙堆,辨别出十堆沙子中哪堆沙子溶解会变色?
第三题:快速测出假硬币
第一题、 题目描述
现有1000瓶药水其中有一瓶是毒药水,需要提供多少只小白鼠才能检测那瓶毒药水?(尽可能少用小白鼠)
思路分析
因为2^10=1024,故提供10只小白鼠就可以检测出那一瓶毒药水,每个小白鼠占一个二进制位。
首先对1000瓶药水进行编号1~1000,10只小白鼠进行标记1至10号,对10只小白鼠分别灌入药水,1号药水灌给一号小白鼠,2号药水灌给二号小白鼠,3号药水灌给一、二号小白鼠,4号药水灌给三号小白鼠……以此类推,也就是每只小白鼠如果喝了毒药,那该位就为1。
也就是说,把1000瓶药水转换成二进制,对应的二进制位为1表示该药水给这只小白鼠喝,为0表示该药水不给这只小白鼠喝。根据小白鼠的存活状态,转换成十进制来判断具体是哪瓶药水是毒药水。
题解
通过观察一至十号小白鼠哪只或者哪几只死亡就可以知道是哪瓶是毒药水了。假设1、2号小白鼠死亡,则代表3号瓶的药水是毒药水;假设1、3、5、6、7、8、9号小白鼠都死亡了,则说明编号为501的药水 是毒药水。
推广
已知有m瓶药水,那么需要 x只小白鼠就可以检测出那一瓶毒药水。只需满足条件: 2的x次方 ≥ m。
第二题、 题目描述
假如现只有四核量杯和十堆沙子,沙子外观一致,但是其中有一堆沙子溶解在水中会变色,溶解需要两分钟。现时间紧迫,需要在两分钟内快速辨别 出十堆沙子中是哪一堆沙子溶解会变色?
思路分析
只需要两分钟就可以检测出是哪堆沙子溶解会变色。(采用四位二进制码的思想)
首先,将十堆沙子依次编号1~10,将1号沙子往一号量杯放入一部分,将2号沙子往2号量杯放入一部分,将3号沙子分别向一号和二号量杯放入一部分……以此类推。
也就是说,将10堆沙子转换成二进制,对应的二进制位为1表示该堆沙子可以放入这个量杯中,为0表示该堆沙子不可以放入这个量杯中。两分钟后,就可以根据量杯的颜色辨别是哪堆沙子溶解会变色。
题解
通过观察四个量杯颜色就可以辨别出是哪堆沙子溶解会变颜色。假如一、二、三号量杯都变色了 ,说明是7号沙堆溶解会变色;假如一、四号量杯都变色了 ,说明是9号沙堆溶解会变色;假如二、三号量杯都变色了 ,说明是6号沙堆溶解会变色。
推广
针对这个问题,只要沙子不超过16堆都可以用四个量杯在两分钟内快速检测出来的。
已知 x 堆沙子和 m 个量杯,它们满足 2 的x次方 ≥m 就可以快速辨别出是哪一堆沙子溶解会变色。
全部评论