有十箱苹果,每箱一百个,每个十斤,但有一箱每个九斤,问只称一次就找出这箱苹果,怎样做?
给每个箱子编号,从1~10,从第一个箱子里面取1个,第二个取2个,第三个取3个...第10个取10个,然后称,因为每个箱子100个苹果,假如:每个箱子10斤,那么每个苹果就是0.1斤,这么取出来的苹果就是(1+2+3+4+5+6+7+8+9+10)*0.1 = 5.5斤,现在有一个箱子是9斤的,那么每个苹果就是0.09斤,所以称出来的结果就比5.5小,如果称出来的结果是5.41=5.5-0.09,斤,那么9斤的苹果就是第一箱,如果是4.96 = 5.5-0.09*6 斤,那么9斤的苹果就是第6箱,1一箱子10个、100个还是1000个苹果都无所谓,只要编号1~10,原理都是一样的。
十只老鼠和一千瓶毒药的奇葩故事
问题描述:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。
任何喝下毒药的生命都会在一天后死亡。现在你只有10只小白鼠和1天的时间,如何检验出哪个瓶子有毒药?
解答:
根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。具体实现跟3个老鼠确定8个瓶子原理一样。
000=0
001=1
010=2
011=3
100=4
101=5
110=6
111=7
一位表示一个老鼠,0-7表示8个瓶子。也就是分别将1、3、5、7号瓶子的药混起来给老鼠1吃,2、3、6、7号瓶子的药混起来给老鼠2吃,4、5、6、7号瓶子的药混起来给老鼠3吃,哪个老鼠死了,相应的位标为1。如老鼠1死了、老鼠2没死、老鼠3死了,那么就是101=5号瓶子有毒。
同样道理10个老鼠可以确定1000个瓶子。
步骤如下:
将1千瓶水编上从 1 到 1千的号。
将编号转化成 2 进制数。如 3 就是 11。
将转化成 2 进制数的编号的水分成10组。将所有编号第10位是1的分在第1组,编号第9位是1的分在第2组...编号个位是1的分在第10组。因为 2 的 10 次方是 1024,大于 1千,所以毒药肯定在上面分的若干组中。
将上面10组各组内的水混合。最后形成10瓶水。
给老鼠标编上从 1 到 10的号。标号1的老鼠吃第1组混合的水,标号2的吃第2组混合的,以此类推。
一天后观察结果。老鼠死了记为1,没死记为0。根据观察的结果可以得到类似这样的长度是10的数据: 1(标号1的死了)0(标号2的活着)01001010。 将这个数据转化成 2进制就是毒药的编号。原因是,如果标号为n的老鼠死了,那毒药一定在第n组中,即毒药的编号的2进制数第n位一定是1,否则为0。