星星之火-用小白鼠找毒药
本文最后更新于:December 3, 2021 pm
积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。
目录
描述
有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,给你24小时时间,至少要多少只小白鼠才可以试出哪瓶有毒?
答案
10只。(1000(1111101000),1000的二进制位有10位数字。)
思路
这是一个二进制的问题,利用二进制的位数进行统计。首先210 = 1024 > 1000,所以需要10位二进制位来表示1到1000。
给1000瓶水分别标号1-1000。再将其十进制数字转化为二进制,如下:
1 |
|
再去找每一瓶水的标号的二进制位中有为1的位置(从右向左以1开始),如下:
1 |
|
即,第一瓶给编号为1的老鼠喝,第二瓶给编号为2的老鼠喝,第三瓶给编号为1、2的老鼠喝,··· 第1000瓶给编号为4、6、7、8、9、10的老鼠喝。喝了白水再喝毒水或者喝了毒水再喝白水是对最后结果没有影响的。
因为瓶的标号的二进制是从右向左开始计数的,所以老鼠的编号也应该从右向左排,即从10号排到1号,即:10 9 8 7 … 2 1。(因为10只老鼠就相当于是一个10位的二进制位,每一只老鼠是一个二进制位。)
在24小时后,查看10只老鼠的情况,死的表示为1
,活着的表示为0
。
假如:有毒的水为瓶标号为5号。则10只老鼠的情况为:
1 |
|
将其二进制转化为10进制后即为答案5。
因为瓶标号为5(0000000101)的水会给1、3号老鼠喝,而喝完24小时后老鼠会死亡,而其他老鼠喝其他的没有影响。
同理:如果有毒的水为瓶标号为1000号。则10只老鼠的情况为:
1 |
|
将其二进制转化为10进制后即为答案1000。
本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/865063331.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!