称球问题

称球问题

题目:有12个小球,其中有1个是不合格的,其他11个都合格,请你找出来.要求只能要天平称3次,并指出不合格的小球是比合格的重还是轻.

CU上的斑竹win_hate已经给出了这个问题的一个算法,我把它贴在这里:

设数据分为三组 A[ 1 .. 4 ],B[ 1 .. 4 ],C[ 1 .. 4 ]

1  如果  sum(A,  1 .. 4 ==  sum(B,  1 .. 4 //  目标在 C 中
   1.1  如果 sum (A,  1 .. 3 ==  sum (C,  1 .. 3 )
           目标为 C[
4 ] 再作一次比较可知轻重,退出。
  
1.2  如果 sum (A,  1 .. 3 >  sum (C,  1 .. 3 )
           目标较轻,比较 C[
1 ], C[ 2 ] 可推出目标之索引,退出。
  
1.3  如果 sum (A,  1 .. 3 <  sum (C,  1 .. 3 ) 同1. 2

2  如果 sum(A,  1 .. 4 >  sum (B,  1 .. 4 //  目标不在 C 中,若目标在A中,则重,在B中,则轻。
   2.1   如果 A[ 3 ] + B[ 3 + B[ 4 ==  A[ 4 +  B[ 1 +  B[ 2 ]
        目标在 A[
1 ]A[ 2 ] 中,且目标较重,比较 A[ 1 ], A[ 2 ] 可得目标索引,退出。
  
2.2   如果 A[ 3 ] + B[ 3 + B[ 4 >  A[ 4 +  B[ 1 +  B[ 2 ]     //  (X)
         2.2 . 1  如果 B[ 1 ] != B[ 2 ], 则目标在 B 中,较轻,从比较结果可知索引,退出。
        
2.2 . 2  如果 B[ 1 ] == B[ 2 ], 则目标不为 B[ 1 ], B[ 2 ]。
        同时,目标也不为 A[
4 ],因为若目标在A中,必定较重,这与(X) 相悖。
        目标不为 B[
3 ], B[ 4 ],因为若目标在 B 中,必定较轻,这与(X) 相悖.
        故目标为 A[
3 ](其实此时(X) 可化为A[ 3 ] > A[ 4 ] 了), 退出。
  
2.3  如果 A[ 3 ] + B[ 3 + B[ 4 <  A[ 4 +  B[ 1 +  B[ 2 ]    
        同 
2.2  

3  如果 sum(A,  1 .. 4 >  sum (B,  1 .. 4 )  
        同 
2

q.e.d

原文的链接:
http://bbs.chinaunix.net/viewthread.php?tid=644659&fpage=1&highlight=



你可能感兴趣的:(称球问题)