12个球称三次找出异常一球解法

来源:百度文库 编辑:神马文学网 时间:2024/04/27 11:10:16
烽烟又起,各大小公司抢人之际,重提........
摘自“蓝色理想”http://www.blueidea.com/tech/web/2005/2464.asp
有十二个乒乓球特征相同,其中只有一个重量异常,现在要求用一部没有砝码的天平称三次,将那个重量异常的球找出来。
评分标准:
1、30分钟以内做出来:智力很高很高很高,不知道有多高。
2、60分钟以内做出来:智力很高。
3、两小时内做出来: 智力相当高。
4、1天或者1周内做出来:智力也很高,而且还是一个有毅力的人。
5、10分钟内做出来:你或者以前做过,或者多半是个马虎的人。
这里的问题关键是异常,所以不知道是轻了,还是重了,并且解题最后还要知道这球是轻还是重了。这个问题是我偶而在论坛里看到的,我向来是觉得自己的智商还成,但一小时过去,我没有能解出来,就放弃了,当然我,仍然没有放过 google ,大致知道了解法。终于,看到了我们站点的第一智商的 qiushuiwuhen 在 2002 年中,用JS写的解法,非常的棒,有兴趣的人可以先自己解一下这个题(哈哈,计一下时,另不准上网搜索),回头再看看他的JS,学习一下他的方法。他的解法,我放在下一页了。大家要忍住不要点哦。http://www.blueidea.com/tech/web/2005/2464_2.asp
下面从信息论的角度分析,更具一般性:http://ww123.net/baby/viewthread.php?tid=21839
分别为a b c d, e f g h, i j k l,取出abcd, efgh
第一种情形:
如果重量相等,则说明所求在 ijkl 中,
称量 i j ,
如果相等,比较 a k ,如果a=k,则所求为 l ;如果ak不等,则所求为 k 。
如果不等,比较 a i ,如果a=i,则所求为 j ;如果不等,则所求为 i 。
第二种:
如果 abcd 轻,
在efgh中取出 fgh ,替掉abcd中 bcd,从ijkl中取出 ijk 个放入 e 中填补空位:
如果afgh轻:则说明所求在a或e,拿 e 和除 a 以外的任意一球比较,如果重量相等,则所求的球是 a ;如果不等,则所求的球是 e 。
如果afgh重:说明所求在 fgh 中,且所求较重;比较 f g ,等重则所求为 h ;不等则重的为所求。
如果一样重:说明所求在 bcd 中,且所求较轻;以下同afgh重的情形。
第三种:
如果 abcd 重,
在efgh中取出 fgh ,替掉abcd中 bcd,从ijkl中取出 ijk 个放入 e 中填补空位:
如果 afgh 重:则说明所求在a或e,拿 e 和除 a 以外的任意一球比较,如果重量相等,则所求的球是 a ;如果不等,则所求的球是 e 。
如果afgh轻:说明所求在 fgh 中,且所求较轻;比较 f g ,等重则所求为 h ;不等则重的为所求。
如果一样重:说明所求在 bcd 中,且所求较重;以下同afgh轻的情形。
此题答案就是这样。下面与大家进而探讨称任意球数的通用性。
总结:
天平称重,有两个托盘比较轻重,加上托盘外面,也就是每次称重有3个结果,就是ln3/ln2比特信息。n个球要知道其中一个不同的球,如果知道那个不同重量的球是轻还是重,找出来的话那就是n个结果中的一种,就是有ln(n)/ln2比特信息,如果不知道轻重,找出来就是2n(n个球中的一个,轻或者重,所以是2n)个结果中的一种,那就是ln(2n)/ln2比特信息。
假设我们要称k次,根据信息理论,那显然两种情况就分别有:
(1)k*ln3/ln2>=ln(n)/ln2 (k>=1) 解得k>=ln(n)/ln3
(2)k*ln3/ln2>=ln(2n)/ln2 (k>1) 解得k>=ln(2n)/ln3
这是得到下限,可以很轻易证明满足条件的最小正整数k就是所求。比如称3次知道轻重可以从3^3=27个球中找出不同的球出来,如果不知道轻重就只能从(3^3-1)/2=13个球中找出不同的球出来。