有一種很有意思的游戲,就是有物體若干堆,可以是石子或是圍棋子等等均可。兩個人輪流從堆中取物體若干,規定最后取光物體者取勝。取石子游戲是我國民間流傳已久的一種博奕,在國外亦稱Nim游戲。別看這游戲極其簡單,卻蘊含着深刻的道理。下面我們來分析一下要如何才能夠取勝。
游戲Ⅰ 有若干堆任意數目的小石子{a1,a2,…,am}(m≥1),兩人輪流取石子,每人每次可以從其中任意一堆中取,每次可以取1、2、3、……或k(1≤k≤ min{a1,a2,…,am})顆石子,把石子取完的人為勝者。
采用符號{a1,a2,…,am;k}來代表游戲Ⅰ中小石子的初始狀況和限制條件,一個人取一次石子實際上就是把{a1,a2,…,am;k}中某個分量ai(1≤i≤m)減小為ai′,即{a1,a2,…,ai,…,am;k}—→{a1,a2,…,ai′,…,am;k}(0≤ai<ai),我們把這種取一次石子使數組發生的變換稱為T變換,根據現成博奕論先驅馮·諾伊曼(VonNeumann)的“完全確定信息游戲必定存在一種確定的獲勝策略”的經典理論,要么對先取者存在某種取法,即某個T變換,無論后取者如何取,先取者總有相應對策,直至最終取得勝利;要么無論先取者如何取,后取者可以找到某種T變換,保證后取者總有相應策略獲勝。為了解決游戲{a1,a2,…,am;k}的對策,我們先看一個簡單的例子。
例1 桌上放着一堆小石子一共100顆,兩人(甲、乙)輪流取,每次可以取1至10顆,取完的人為勝者,怎樣才能取勝?
分析這個問題實際上是取石子游戲的特殊情形{100;10},我們利用倒推法:容易看出11是取勝的關鍵數學,因為到此時,不論對方(甲)取多少顆(大於0且小於11),總留下大於0且小於11顆石子,這樣乙方一次取完即獲得勝利。同樣地分析,要取到11必須取到22,33,44,55,66,77,88,99,這樣我們就知道了獲勝之道:
①先取1顆石子,留下99顆,然后對方取a(1≤a≤10)顆,己方取(11—a)顆,就總能掌握這種致勝的關鍵數,從而確保獲勝。②如果對方先取,己方只需利用對方不知道其中奧秘,爭取到一個致勝數,就總能依①中方法取到下一個致勝數,最后取得勝利。實際上,如果局中人均熟知獲勝策略,那么開局的局勢就已經完全決定了結局的輸贏,例1其實是先取者必勝的局勢,從這個例子的分析過程我們得到啟示:可以用同余理論來探討一般情況。
一般地,在取石子游戲{a1,a2,…,am;k中,ai≡ai′(modk+1)(i=1,2,…,m)其中0≤ai′≤k,在{a1′,a2′,…,am′;k}中有取勝策略的一方在{a1,a2,…,am;k}中也有取勝策略。證明 在{a1′,a2′,…,am′;k}中有獲勝策略的一方,對於大於k的分量ai(i=1,2,…,m總能做到ai≡ai′(modk+1),即對方取a(1≤k),己方取k+1-a,使兩人各取一次之后該分量減小k+1,也就對第i堆各取n(n≥1)次之后石子數便由ai=ai′+n(k+1)變成ai′,故在{a1′,a2′,…,am′;k}中有取勝策略的一方在{a1,a2,…,am;k}中也有取勝策略。
游戲Ⅱ 有若干堆任意數目的小石子{a1,a2,…,am},兩人輪流從中取石子,每人每次可以取走任意一堆中任意數目的石子,不能不取,把石子取完的人為勝者。
采用m元數組{a1,a2,…,am}(m≥1)來描述這類取石子游戲,一人取走一次石子相當於用某個T變換把其中某個分量ai(1≤i≤m)減小為ai′,即{a1,a2,…,ai,…,am}T{a1,a2,…,ai′,…,am}(0≤ai′<ai)。
有趣的是為了解決這類一般情況,我們需要用到整數的二進位制,把m元數組{a1,a2,…,am}中的每一個分量用二進位制數表示,ai(1≤i≤m)寫在第i行,同時對齊二進位制數的位數,在列上作十進位制加法,其和寫在第(m+1)行,記為{n1,n2,…,nj,…,nl},如果所有這些和數nj(1≤j≤l)均為偶數,我們稱這個m元數組為偶數組;若nj(1≤j≤l),中有一個數為奇數,則稱之為非偶數組。
例如:對於3元數組{2,3,5};
a1 2 0 1 0
a2 3 0 1 1
a3 5 1 0 1
1 2 2
n1 n2 n3
因為其中n1=1,所以{2,3,5}是非偶數組。
同樣,對於3元數組{2,3,1}:
a1 2 1 0
a2 3 1 1
a3 1 0 1
由於nj(j=1,2)為偶數,則{2,3,1}為偶數組。
偶數組與非偶數組在T變換下具有如下性質:
(1)偶數組經過一次T變換之后一定變為非偶數組;
(2)對於非偶數組,一定可以找到某一個T變換,使其變為偶數組。
這樣我們容易判定:如果給定的m元數組是偶數組,則后取者必有獲勝策略;相反,若給定m元數組為非偶數組,則先取者有方法獲勝,因為給定的m元數組為偶數組,先取者無論怎樣取,只能將偶數組變為非偶數組,后取者則有策略將此時的非偶數組變為偶數組,由於每次取走石子,剩下石子數目一定越來越小,而{0,0,…,0}是偶數組,所以后取者獲勝,同理可證相反情況。
例2 有三堆石子,各堆數目分別是2、3、6,兩人輪流取,取完的人為勝者,若甲先乙后,誰取勝?
解:
a1 2 0 1 0
a2 3 0 1 1
a3 6 1 1 0
1 3 1
n1 n2 n3
ni為奇數i=1,2,3,所以{2,3,6}為非偶數,我們可以判定:先取者甲獲勝,依性質證明過程給出的操作方法,只需將a3=6變為1,可以驗證{2,3,1}是偶數組,無論乙如只可能變成如下六種情形之一:{2,3,0},1},{2,1,1},{2,0,1},{1,3,1},{0,3,1},都是非偶數組,同樣按原方法可以將其變2}或{1,1},乙再取后,甲總能確保獲勝。
例3:第 12 屆全國青少年信息學奧林匹克聯賽初賽題現有5堆石子,石子數依次為3,5,7,19,50,甲乙兩人輪流從任一堆中任取 (每次只能取自一堆,不能不取),取最后一顆石子的一方獲勝。甲先取,問甲有沒有獲勝策略(即無論 乙怎樣取,甲只要不失誤,都能獲勝)?如果有,甲第一步應該在哪一堆里取多少?請寫出你的結果: _________________________________________________。
解:由游戲Ⅱ知,得到如下推理:
19 010011
7 000111
5 000101
3 000011
010010 (18)10
50-18=32
所以第1次只能在第5堆石子中取32粒,使得取出32粒后為偶數組。
最后我們看一道綜合利用游戲Ⅰ、Ⅱ的例子:
例4 在3×25的棋盤上放着三顆石a、b、c(如圖所示),兩人輪流將石子向右移人一次只可以移動其中一顆石子1至5后無格可走者為輸家,若甲先行,乙后行,贏?
|
|
a |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
b |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
解 由25≡7(mod6),根據游戲Ⅰ的策略{25,25,25;5}中有獲勝策略的一方在{7,7,7;5}中也有獲勝方法,又把石子由圖中所示{3,2,6}移到{7,7,7}即相當於取石子游戲Ⅱ的{4,5,1},由於{4,5,1}是偶數組,故先移者輸.