找坏药丸

有10瓶药丸,可以认为每一瓶的药丸有无限有颗。这其中有9瓶是好的,一瓶是坏的。坏药丸比好药丸重1g,现给你一杆称,问:

1) 最多称几次可以确定那一瓶中装的是坏药丸?

2) 如果事件不知道有几瓶中装的是坏的,又要称多少次可以确定哪些瓶中装的是坏的?

答: 1) 1 次。 用 H(i) = 1 表示第i瓶中装的是坏药丸,H(i) = 0 表求第i瓶中装的是好药丸。从第i瓶中取出i粒药丸,则这些药丸一共重了:

          H(1) * 1 + H(2) * 2 + ... + H(10) * 10 = H(k) * k ( 1 <= k <= 10);

          因为H(i) ( 1 <= i < = 10) ,中只有一个为1,假定为k。所以上式是成立的,也就是多了H(k) * k = k克, 所以如果称出来多了多少g,那么那一瓶就是坏的。

     2) 1 次。现在从第i瓶中取出2^(i - 1)粒,则这些药丸重了:

         H(1) * 1 + H(2)  * 2 + H(3) * 2^2 + ... + H(10)) * 2^9 = G

         由于H(i)的取值集合是{0,1} ,所以H(10)H(9)...H(1)可以看成是一个2进制的数,而它的10进制值恰好为G,所以只要称一次,然后将多出来的重量值写成二进制形式,看那些位为1就行了。

原文地址:https://www.cnblogs.com/li_shugan/p/2697306.html