称球问题一般会有以下3种情况:
1、M个球,其中有一个坏球,知道是轻还是重,用天平称出坏球来。
2、M个球,其中有一个坏球,不知是轻还是重,用天平称出坏球来。
第1种情况,比较简单,1次可以称3个球,2次可称9个球,k次可以称3^k(3的k次方)个球。
假设有足够正常重量球的情况下称k次可以从最多F(k)个球里找出不知轻重的坏球(称多次的情况下,称完第一次就会有若干正常重量的球了),现在来计算称k+1次的F(k+1)最大可以到多少,在有足够正常重量球的情况下,0次可以称出1个球,1次可以称出2个球。因此F(0)=1,F(1)=2。
按照测试用例设计的元素分析法,先找出其中的元素:天平,若干球
先分析一下这些元素的属性,天平有两端托盘可以放东西,可以根据天平平衡情况判断天平两端放的东西重量是否相等。球的属性主要是重量,正常球重量都相等,坏球重量和正常球不相等。
再用测试用例设计的分类推理法来进行分类,按球的属性是无法分类的,因为每个球的重量都不知道,因此按天平属性来进行分类,可以将球分为三类,放在天平左端托盘中的,放在天平右端托盘中的,没有放入天平托盘的。
任何一个球最终都可以归结到上面分成的三类中,不论将球分成多少堆,最终都可以将其看成只有三堆,一堆要放入天平左端托盘中,一堆要放入天平右端托盘中,一堆不放入天平托盘中。所以分成了X,Y,Z三堆(某堆可以为空)可以看成是唯一的分法。
在称完第1次后,此时可以再次使用元素分析法,找出四个元素:天平,X,Y,Z
和前面一样可以采用分类推理法根据天平元素的属性将X分成X1,X2,X3;Y分成 Y1,Y2,Y3;Z分成Z1,Z2,Z3。由于对称性,可以按以下进行放置:
天平左端放置 X1,Y1,Z1
天平右端放置 X2,Y2,Z2
设G(k) = X+Y
当X1+Y1+Z1 比 X2+Y2+Z2重时,无法判断是Y2中有坏球还是X1中有坏球,由于对称性,可以假定Y2为0(球个数为0),那么就可以判断出X1中有坏球,且坏球比正常球重,此时X1+Y2=3^(k-1) 。如果X1和Y2都不为0时,可以得到X1+Y2=G(k-1)。
当X1+Y1+Z1 和 X2+Z2重量相等时,表明坏球在X3+Y3+Z3中,由于此时无法判断坏球是在X3还是Y3中,如果令其中一个为0,那么另一个则为已知重量情况下称k-1次的最大个数,因此X3+Y3最大值为3^(k-1),如果不为0,则X3+Y3=G(k-1)。
当X1+Y1+Z1 比 X2+Z2轻时,由于此时无法判断坏球是在Y1还是X2中,并且X2比Y1重,这和X比Y重的情况是一样的,那么可以得出X2+Y1=G(k-1)或者3^(k-1)
这时有G(k) = X+Y = 3^k
或者G(k) = X+Y = 3×G(k-1)
由于Z堆中球的最大个数是在X和Y一样重的情况下来求解的,因此这里Z1,Z2,Z3中的球的个数并不重要,前面已经讲过 Z = F(k)
这样可以得到F(k+1) = X+Y+Z = X1+X2+X3+Y1+Y2+Y3+Z
= F(k) +G(k)
=F(k) + 3^k
这样3次可以称出13个球,4次可以称出40个球….。
根据以上的推理过程,可以得出以下的称法:
2次称5个球的称法(有标准球参照,F(2) = F(1)+3 = 2+3 = 5)
有标准球时2次称5个球的称法
将球编号为1,2,3,4,5,标准球记为S
将1,2放入天平的一端,3,S放入天平的另一端
如果1,2 比3,S重,表明坏球在1,2,3中,此时将1,2放入天平两端称一下,如果重量相等则3为坏球,如果不相等则重的那个是坏球。
同理如果1,2比3,S轻时,将1,2放入天平两端称一下,相等则3为坏球,不相等则轻的那个为坏球。
如果1,2和3,S一样重,表明坏球在4,5里面,取4和S一起称一下,相等则5为坏球,不相等则4为坏球。
3次称13个球的称法(无标准球做参考)
将球分为(1,2,3,4),(5,6,7,8),(9,10,11,12,13)三组
将(1,2,3,4)和(5,6,7,8)放入天平两端称一下
如果重量相等则转换为有标准球做参考在(9,10,11,12,13)5个球里找坏球的问题,上面已经给出了。
如果重量不等,由对称性不妨设1,2,3,4为重的一端
将(1,5,6,7)和 (8,9,10,11)一起称一下
如果(1,5,6,7)重,则表明坏球在1或8里面,只要拿一个标准球和1或8称一下就可以找出坏球
如果两边一样重,那么坏球在2,3,4里,且坏球为重球,称一次就可以称出
如果(1,5,6,7)轻,那么坏球在5,6,7里面,且坏球为轻球,称一次就可以找出。
1、M个球,其中有一个坏球,知道是轻还是重,用天平称出坏球来。
2、M个球,其中有一个坏球,不知是轻还是重,用天平称出坏球来。
3、M个球,其中有一个坏球,不知是轻还是重,用天平称出坏球来,并告知坏球是轻还是重。
第1种情况,比较简单,1次可以称3个球,2次可称9个球,k次可以称3^k(3的k次方)个球。
第2种情况就比第1种情况复杂多了,对第3种情况,和第2种情况类似,知道了第2种的解法后,第3种自然也就解出来了。
假设有足够正常重量球的情况下称k次可以从最多F(k)个球里找出不知轻重的坏球(称多次的情况下,称完第一次就会有若干正常重量的球了),现在来计算称k+1次的F(k+1)最大可以到多少,在有足够正常重量球的情况下,0次可以称出1个球,1次可以称出2个球。因此F(0)=1,F(1)=2。
按照测试用例设计的元素分析法,先找出其中的元素:天平,若干球
先分析一下这些元素的属性,天平有两端托盘可以放东西,可以根据天平平衡情况判断天平两端放的东西重量是否相等。球的属性主要是重量,正常球重量都相等,坏球重量和正常球不相等。
再用测试用例设计的分类推理法来进行分类,按球的属性是无法分类的,因为每个球的重量都不知道,因此按天平属性来进行分类,可以将球分为三类,放在天平左端托盘中的,放在天平右端托盘中的,没有放入天平托盘的。
任何一个球最终都可以归结到上面分成的三类中,不论将球分成多少堆,最终都可以将其看成只有三堆,一堆要放入天平左端托盘中,一堆要放入天平右端托盘中,一堆不放入天平托盘中。所以分成了X,Y,Z三堆(某堆可以为空)可以看成是唯一的分法。
将F(k+1)个球分成X,Y,Z三堆,先将X,Y放入天平的两端称一下,由于对成性,只需要考虑两种情况:
此时只要在Z堆中找出坏球就可以了,Z=F(k)。
在称完第1次后,此时可以再次使用元素分析法,找出四个元素:天平,X,Y,Z
和前面一样可以采用分类推理法根据天平元素的属性将X分成X1,X2,X3;Y分成 Y1,Y2,Y3;Z分成Z1,Z2,Z3。由于对称性,可以按以下进行放置:
天平左端放置 X1,Y1,Z1
天平右端放置 X2,Y2,Z2
设G(k) = X+Y
当X1+Y1+Z1 比 X2+Y2+Z2重时,无法判断是Y2中有坏球还是X1中有坏球,由于对称性,可以假定Y2为0(球个数为0),那么就可以判断出X1中有坏球,且坏球比正常球重,此时X1+Y2=3^(k-1) 。如果X1和Y2都不为0时,可以得到X1+Y2=G(k-1)。
当X1+Y1+Z1 和 X2+Z2重量相等时,表明坏球在X3+Y3+Z3中,由于此时无法判断坏球是在X3还是Y3中,如果令其中一个为0,那么另一个则为已知重量情况下称k-1次的最大个数,因此X3+Y3最大值为3^(k-1),如果不为0,则X3+Y3=G(k-1)。
当X1+Y1+Z1 比 X2+Z2轻时,由于此时无法判断坏球是在Y1还是X2中,并且X2比Y1重,这和X比Y重的情况是一样的,那么可以得出X2+Y1=G(k-1)或者3^(k-1)
这时有G(k) = X+Y = 3^k
或者G(k) = X+Y = 3×G(k-1)
对后面那个等式,可以求出G(k) = 3^(k-1)×G(1) ,由于G(1)的最大值不可能超过3
综合上面两种情况,G(k)取最大值3^k由于Z堆中球的最大个数是在X和Y一样重的情况下来求解的,因此这里Z1,Z2,Z3中的球的个数并不重要,前面已经讲过 Z = F(k)
这样可以得到F(k+1) = X+Y+Z = X1+X2+X3+Y1+Y2+Y3+Z
= F(k) +G(k)
=F(k) + 3^k
解出F(k) = (3^k -1) / 2 +F(1) - (3 - 1)/2 = (3^k -1) / 2 +1
这样3次可以称出13个球,4次可以称出40个球….。
根据以上的推理过程,可以得出以下的称法:
2次称5个球的称法(有标准球参照,F(2) = F(1)+3 = 2+3 = 5)
有标准球时2次称5个球的称法
将球编号为1,2,3,4,5,标准球记为S
将1,2放入天平的一端,3,S放入天平的另一端
如果1,2 比3,S重,表明坏球在1,2,3中,此时将1,2放入天平两端称一下,如果重量相等则3为坏球,如果不相等则重的那个是坏球。
同理如果1,2比3,S轻时,将1,2放入天平两端称一下,相等则3为坏球,不相等则轻的那个为坏球。
如果1,2和3,S一样重,表明坏球在4,5里面,取4和S一起称一下,相等则5为坏球,不相等则4为坏球。
3次称13个球的称法(无标准球做参考)
将球分为(1,2,3,4),(5,6,7,8),(9,10,11,12,13)三组
将(1,2,3,4)和(5,6,7,8)放入天平两端称一下
如果重量相等则转换为有标准球做参考在(9,10,11,12,13)5个球里找坏球的问题,上面已经给出了。
如果重量不等,由对称性不妨设1,2,3,4为重的一端
将(1,5,6,7)和 (8,9,10,11)一起称一下
如果(1,5,6,7)重,则表明坏球在1或8里面,只要拿一个标准球和1或8称一下就可以找出坏球
如果两边一样重,那么坏球在2,3,4里,且坏球为重球,称一次就可以称出
如果(1,5,6,7)轻,那么坏球在5,6,7里面,且坏球为轻球,称一次就可以找出。