找坏药丸
有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就行了。
- 3楼Li_Shugan1昨天 16:18
- 因为只有坏的才会多出重量,所以H(i)=1表示坏的.
- 2楼justforbigshot昨天 16:17
- 题目存在问题吧,应该是最少几次称出来?题目还有错别字,读不通。n第二问讲得不是很明白,如果H(i)的取值集合是{1,2}怎么理解,怎么通过二进制的为判断?
- 1楼Li_Shugan1昨天 19:56
- 嗯 谢谢你,题目的错误的地方改过来了,H(i)在我这个设定上只能取{0,1},H(i)=1表示坏的,H(i) = 0表示好的。