白色粉末

来源:互联网 发布:官方丐哥捏脸数据 编辑:程序博客网 时间:2024/04/27 20:37
十袋白色粉末,其中有一袋溶于水两分钟以后会变蓝,现在只有四个杯子,无限多的水,要求是在最短的时间内找出这袋特殊的粉末

方法一:一二三四号粉末放第1个杯子里,五六七八号粉末放第2个杯子里, 剩下的九十号分别放到剩下的两个杯子里,这样的话,如果刚好是九十号中的一个是特殊粉末,那么只需两分钟就可以鉴别,如果是1号杯子变蓝,只需把水全部倒 掉把一二三四号粉末分别放到1234号杯子里再过两分钟就可以鉴别,就是说最多4分钟最少两分钟就可以鉴别出来.

平均时间:2/10*2+8/10*4=3.6

方法二:每个杯子放一袋粉末倒水过两分钟不变蓝再换四袋,这样最多三轮也能鉴别出来。

平均时间:4/10*2+4/10*4+2/10*6=3.6

方法三:一二三四号粉末放第1个杯子,二三四号粉末分别放在第234个杯子里,五六七号粉末放到2号杯子里,六七号粉末分别放到34号杯子里,八九号粉末放到第3个杯子里,九十号粉末放到第4个杯子里。

这样如果只有1号杯子蓝了,就是一号粉末,如果1号和2号同时蓝了就是二号粉末,如果1和3变蓝,那就是3好粉末,以此类推,最多只要2分钟就能鉴别。

平均时间:2分钟


白色粉末是大数量级的时候,如果按前面方法一、方法二,时间是无法估量的。那么考虑将第三种方法推广,把四个杯子看做二进制位,那么四个位共有16-1种表示,除去(0000)的情况。四个杯子在两分钟内,可以鉴别15袋粉末(16袋粉末也能鉴别,表示剩下的一个粉末肯定是要找的)。依此类推,当杯子达到32个的时候,理论上一次二分钟可以鉴别2^32-1 足够表示42亿袋粉末。

但如果考虑到杯子不可能同时装入过多的粉末,下面推出这种限制。

15袋粉末,4个杯子的时候:

杯子4,杯子3,杯子2,杯子1

8            4            2            1

9            5            3            3

10          6            6            5

11          7            7            7

12          12         10            9

13          13         11            11

14          14         14            13

15          15         15            15

如上有:1对应0001(粉末1放入杯子1),2对应0010(粉末2放入杯子2),……,15对应1111(粉末15放入杯子1,2,3,4),可鉴别16袋粉末


当n袋粉末,m个杯子时,

如果n<=2^m时,理论上两分钟内可鉴别

当n==2^m时,考虑到每个杯子需要同时放入的粉末的最大数为:

(1/m)( C(m,1)+2*C(m,2)+3*C(m,3)+……+mC(m,m) ) 

=(1/m)( C(m,1)+m*C(m-1,1)+m*C(m-1,2)+……+mC(m-1,m-1) )

=(1/m)(  C(m,1) +m*(2^(m-1)-1) )

=2^(m-1)

随m呈指数增长的,杯子不可能同时装下这么多,需要对此做一定的限制的,那么一次能鉴别的粉末数也要减少。