球类称重问题的一般解法

最近与朋友们讨论球类称重问题的解法,颇有启发,将讨论成果与朋友们分享。

首先球类问题中有两个引理:

引理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为当前剩下的次数。






你可能感兴趣的:(球类称重问题的一般解法)