一排石頭的遊戲(續)

2021-07-13 21:16:38 字數 1886 閱讀 7161

我們繼續分析9棵石頭的情況,在正式開始研究之前,讓我們先研究幾種簡單的情況。

前面的分析中我們已經研究了幾種先手必輸的方案,包括1,4,2+2(其中+表示不連續的兩堆或多堆),3+3。

我們另外引入幾個新的先手必輸的方案,分別是:

1+2+3:假設a先取,a所有可能的取法包括:

(1)      取走1,變成2+3,相當於3+3時取走邊緣1個的中間狀態,a必輸;

(2)      取走2中的1個,變成1+1+3,相當於3+3時取走中間1個的狀態,a必輸;

(3)      取走2中的兩個,變成1+3,相當於3+3時取走2個中間狀態,a必輸;

(4)      取走3個中靠邊的1個,變成1+2+2,對方取走1個,變成2+2,a先手必輸;

(5)      取走3個靠中間的1個,變成1+2+1+1,對方取走2個,a先手必輸;

(6)      取走3個中的2個,變成1+2+1,對方取走2中的1個,a先手必輸;

1+1+4:假設a先取,a可能的取法如下:

(1)      a取1,則對方也取1,變成a先手4個,a必輸;

(2)      a取4靠近邊緣的乙個,變成1+1+3,這相當於3+3時先手取走中間1個的過程,所以結果也是a必輸;

(3)      a取走4個中不靠近邊緣的乙個,變成1+1+1+2,只要對方取走2,則a必輸;

(4)      a取走4個中邊緣的2個,變成1+1+2,只要對方取走2中的1個,也是a必輸;

(5)      a取走4個中間的2個,變成1+1+1+1,對方任意取都是a必輸;

綜合上面的分析,1+1+4也是乙個先手必輸的方案。

另外乙個先手必輸的方案是1+5,還是假設a先取,a可能的取法如下:

(1)      a取1,變成5個石子對方先手,a必輸;

(2)      a取5靠近邊緣的1個,對方取走1,變成a先手4個,必輸;

(3)      a取5個中的第二個,變成1+1+3,同上面的2,對方先手勝;

(4)      a取5個靠近中間的1個,變成1+2+2,對方取走1,變成a先手2+2,a負;

(5)      a取5個靠近邊緣的2個,變成1+3,相當於3+3時取走連續兩個的中間狀態,a負;

(6)      a取5個中靠近中間的2個,變成1+1+2,對方先手勝,a負;

綜合上面的分析,1+5也是乙個先手必輸的方案。

所有自己先手的時候,能夠一步造成對方先手負的局面,這樣的局面則肯定是先手勝利的,因為2+2+3,1+3+3,1+2+4,2+3+3,1+3+4,1+2+5,3+4,3+4,1+6,1+7,2+5,2+6都可以一步使得局面變成1+2+3而且對方先手,己方必勝;同樣的,1+2+4,1+3+4,1+1+5,1+1+6,1+6,1+7,3+4,4+4等局面,都可以一步使得局面變成1+1+4而且對方先手,己方必勝;同樣的,2+5,3+5,1+6,1+7等局面,可以一步使得局面變成1+5而且對方先手,也是己方必勝的局面。

下面我們就可以開始分析9棵石子的情況了,為了簡單起見我們將這些石子按照順序編號為1~9,還是a先手,a所有可能的取法包括(去除了明顯對稱的取法):

(1)      a取1,局面為8,b先手必勝;

(2)      a取2,局面為1+7,b先手必勝;

(3)      a取3,局面為2+6,b先手必勝;

(4)      a取4,局面為3+5,b先手必勝;

(5)      a取5,局面為4+4,b先手必勝;

(6)      a取1、2,局面為7,b先手必勝;

(7)      a取2、3,局面為1+6,b先手必勝;

(8)      a取3、4,局面為2+5,b先手必勝;

(9)      a取4、5,局面為3+4,b先手必勝;

綜上所述,當9個石子時,先手必敗。

從上面的結論可以簡單推導得出,10和11棵石子都是先手必勝的方案。

一排石頭的遊戲

程式設計之美 1.11節介紹了乙個取石頭的遊戲,遊戲規則如下 n個石頭排成一行,兩個玩家依次取石頭,每次可以取一塊或者相鄰的兩塊,取到最後一塊石頭的獲勝。如果a方先手,如何保證自己獲勝?書中給出了乙個a必勝的方案,如果總共有奇數個石頭,a取走中間的一塊,如果總共有偶數塊石頭,a取走中間的兩塊,這樣石...

「拈」遊戲系列一 一排石頭的遊戲

這個題目來自於程式設計之美上的nim 1 一排石頭的遊戲,該類問題能考察面試者的思維,往往是兩個人玩的乙個遊戲,具體形式公司可以具體設定,這裡題目的意思是取石頭的數目有規定,也可以使報數每次只能增加幾個數字等。該類題目往往是要把最後乙個取完石頭定位為贏或者輸。該類題目第乙個取石頭的人占有主動權也有被...

一排石頭的遊戲(取石頭)C語言實現

問題描述 n塊石頭排成一行,每塊石頭有各自固定的位置。兩個玩家依次取石頭,每個玩家可以取其中任意一塊石頭,或者相鄰的兩塊石頭,石頭在遊戲過程中不移位。最後能將石頭一次取光的玩家獲勝。c語言實現 此處簡化,將石頭數設定為5,用乙個長度為5的陣列表示石頭,當元素值為1的時候,代表有石頭。為0時,代表沒有...