最近与朋友们讨论球类称重问题的解法,颇有启发,将讨论成果与朋友们分享。
首先球类问题中有两个引理:
引理1:
(1) 已知一个球为标准球。
(2) 一个球为非标准球,但是不知道它的轻重。
(3) 用天平称重k次,最多可以从n个球中找出非标准球,并且可以确定它是轻了还是重了。
(4) n = 1 + 3 + ... + 3^{k-2}+3^{k-1}。
引理2:
(1) 一个球为非标准球,并且我们已知它是轻了或是重了。
(2) 用天平称重k次,最多可以从n个球中找出非标准球。
(3) n = 3^{k}。
例题1: 现在有4个球,一个标准球,一个非标准球并且不知道轻或重,用2次找出非标准球并且确定轻或重。
解答:假设标准球为1,其他三个球为2,3,4。那么我们首先称2,3.
If 2==3
那么我们再称1,4, 如此便可确定非标准球是4并且知道轻或重。
If 2>3
此时我们知道2或者3是非标准球,并且2重或是3轻。那么我们再称1,2,如果 1==2,那么说明3是非标准球并且轻了。否则如果1<2,那么说明2是非标准球并且重了。
If 2<3
情况和上面的一种正好相反。
例题2:现在有13个球,一个标准球,一个非标准球并且不知道轻或重,用3次找出非标准球并且确定轻或重。
解答: 我们给所有球标号,1,2,3,4,5,6,7,8,9,10,11,12,13。假设6号是标准球,那么我们分两组
A:1 2 3 4 5
B: 6 7 8 9 10
If A==B
那么我们知道11 12 13中有非标准球,那么我们加入6标准球,就是转换为在4个球中称两次找到非标准球,并且知道轻或重,解决。
If A > B
那么我们将1 2 和 7 8 9 10放一起。并且我们知道1 2 重或7 8 9 10 轻。 再分两组
C: 1 7 8
D: 2 9 10
If C>D
那么1重或是9 10轻,这时我们称重9 10,如果9==10,那么1重。如果9<10,那么9轻,如果9>10,那么10轻。
If C<D
那么2重或是7 8 轻,原理同上。
If C==D
那么3 4 5重, 如果3==4,那么5重。如果3>4,那么3重,如果3<4,那么4重。
If A < B
那么我们仍然将1 2和7 8 9 10放一起。并且我们知道1 2 轻或是7 8 9 10 重。再分两组
E: 1 7 8
F: 2 9 10
If E>D
那么7 8重或是2轻,我们称7 8,如果7==8,那么2轻,如果7>8,那么7重,反之8重。
If E<D
那么1轻或是9 10重,原理同上。
If E=D
那么3 4 5轻,我们也可以用一次找出轻的非标准球。
例题3: 现在有40个球,一个标准球,一个非标准球并且不知道轻或重,用4次找出非标准球并且确定轻或重。
根据例题1,2的启发,我们可以将球分为3组 A(14) B(14) C(12)并且将标准球放入B重。
If A==B
我们可以根据例题2解答。
If A > B
那么我们拿出A中的五个A(5)与B(13)(除去标准球)放一起。并且分成三份
C: A(1 2)B(6 7 8 9)
D: A(3 4)B(10 11 12 13)
E: A(5)B(14 15 16 17 18)
If C==D,那么A(5)重或是B(14 15 16 17 18)轻。
F: A(5)B(14)
G: B(15)B(16)
H: B(17)B(18)
If G==H, 那么我们拿一个标准球和A(5)比,如果A(5)重,那么A(5)就是非标准球,否则B(14)就是非标准并且轻。
If G>H, 那么我们比B(17) B(18),轻的是非标准球。
If G<H, 那么我们比B(15) B(16),轻的是非标准球。
If C<D,那么A(3 4)重,或是B(6 7 8 9)轻。
I: A3 B6
J:A4 B7
K:A5 B8
If I==J, 那么我们拿一个标准球和A5比,如果A5重,A5是非标,否则B8是非标。
If I>J,那么我们拿标准球和A3比,如果A3重,A3是非标,否则B7是非标并且轻。
If I<J,那么我们拿标准球和A4比,如果A4重,A4是非标,否则B6是非标并且轻。
其他情况同理可以推出。
所以总结出来有几点启示:
(1) 当为引理1的条件时,我们将标准球放入,分成两份。
(2) 其他情况下不放入标准球,分成三份,并且保证其中一份的数目是3^{k},k为当前剩下的次数。