题目:有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=