编程之美 4.6桶中取黑白球

问题:有一个桶,里面放有白球、黑球各100个,人们必须按以下规则取出:

1.每次从桶里取出两个球

2.如果两个同色,就放入一个黑球

3.如果两个异色,就放入一个白球

最后桶里只剩下一个黑球的概率是多少?

解法一:

原理:先将问题的规模缩小,然后枚举其操作的过程,找出规律,其实就是归纳法。

原命题的黑白各100,我们可以设为黑白各2个来看看,下面以这种方式表示(黑,白)的数目。

第一次操作可能的情况:

(1,2)或(3,0)

第二次操作可能的情况:

(2,0)或(0,2)

第三次操作可能的情况:

(1,0)或(1,0)

可以看出经过3次操作后,都只剩下一个黑球,总结一下其规律:

1.不论黑白,每次都会减少一个球,最后桶内肯定只剩一个球。

2.每次拿球,白球数量要么不变(-1黑-1白+1白),要么就两个两个地减少(-2白+1黑)

解法二:

原理:用数学的思路来解,利用异或(XOR)的性质来解答。

两个相同的数,xor=0(黑为0)

两个不同的数,xor=1(白为1)

上面的取球操作就可以抽象成:每次捞出两个数做一次xor,并将所得结果放回桶中。

假设取球过程如下:

1.先取两个黑,放入一个黑。0 XOR 0 =0,结果为(1,2)

2.取一黑一白,放入一个白。0 XOR 1 =1,结果为(0,2)

3.最后只能取两个白,1 XOR 1 =0,结果为(1,0)

因为异或满足结合律,即(a XOR b)XOR c=a XOR(b XOR c)

所以上面的操作的先后顺序不影响最终结果,取球过程相当于将里面所有球进行XOR操作。

因此,剩下一个球的时候,桶中的权值等于初始时刻所以球权值的异或值,也就是0(黑色)。

扩展问题:

1.若桶中黑白球个数各为99,那结果如何?

根据解法二,其异或值为1,即最后剩下的一定是白球。

2.如果黑白球数量不定,那结果如何?

还是看异或值,即黑白球的奇偶性。

posted @ 2013-10-09 11:33  Linka  阅读(396)  评论(0编辑  收藏  举报