cvooc

如何用10只实验鼠检测出1000个药瓶中哪个有毒药

题目

给你 10 只实验小鼠,用 7 天的时间检验 1000 个瓶子中带有一瓶毒药的瓶子是哪一瓶,小鼠喝了毒药 7 天后才会死亡,如何编程实现?

































答案

其实这只是一个简单的二进制应用,且听我慢慢道来. 首先我们为所有瓶子进行编号,并将其转换为二进制数. ‭ 则第 1000 瓶的编号为 1111101000‬,为方便理解我们做成表格.

第 1 只 第 2 只 第 3 只 第 4 只 第 5 只 第 6 只 第 7 只 第 8 只 第 9 只 第 10 只
0 0 0 0 0 0 0 0 0 0 (0 号瓶子)
0 0 0 0 0 0 0 0 0 1 (1 号瓶子)
0 0 0 0 0 0 0 0 1 0 (2 号瓶子)
0 0 0 0 0 0 0 0 1 1 (3 号瓶子)
0 0 0 0 0 0 0 1 0 0 (4 号瓶子)
0 0 0 0 0 0 0 1 0 1 (5 号瓶子)
1 1 1 1 1 0 1 0 0 0 (1000 号瓶子)

从表格我们可以看出这 10 只老鼠可以分别对应到二进制瓶子编号的每一位上,现在我把对应位上值为 1 的瓶子的水喂给对应的老鼠; 比如第 10 只老鼠就需要喝 1、3、5 号瓶子的水,而第 9 只老鼠则要喝 2、3 号瓶子的水.


一个星期后我们就可以开始统计了,这 10 只老鼠的生死分别代表 0 和 1.若对应位的老鼠死了,我记对应位为 1. 这代表对应位数值为 0 的瓶子绝对安全.因为我们这只可怜的小白鼠并没有喝该位为 0 的瓶子的水.

例如:若只有第 9 只老鼠和第 10 只老鼠死了,则我们可以得出一个二进制数值'0000000011’.所以我们可以得出编号 0000000011 的那瓶水便是有毒的水.