題目
有 n 塊石頭河兩個玩家 a 和 b. a 先將石頭分成若干堆, 然後按照 bababa... 的順序輪流取石塊, 能將剩下的石頭依次取光的玩家獲勝. 每次取石頭時, 每個玩家只能取一堆的 m(m>=1) 個石頭思路
1. 依然舉例子.
當 n = 1 時, 輸. n = 2 時, 可以分成 1, 1. 贏
當 n = 3 時, 分成 1, 2. 輸
當 n = 4 時, 分成 2, 2, 贏
當 n = 5 時, (1,1,3) (1,2,2) (2,3) 都是輸總結
1. 穩贏叫做安全局面. 能一步跳到安全局面的叫做不安全局面. 不安全局面都是穩輸的
2. 安全局面不能直接跳到安全局面, 即安全局面的任何走動都會跳到不安全局面
3. 不安全局面總可以一步跳到安全局面
因此當 n 為偶數時, 總是安全局面. 總是可以走到 (i,i) 的局面, 而 (1,1) 又是安全局面
當有奇數個時, 擺放成全1的形式, 總是先拿的贏
4. 使用亦或運算
當 m 為偶數時, 我們的取勝策略是把 m 分成相同的兩份, 這樣就能取勝
開始 (m1, m1) xor(m1,m1) = 0
中途 (m1, m2) xor(m1,m2) != 0
我方 (....) = 0
最終 我方勝
當 m 為奇數時, 擺放成全 1 的形式, 先拿著必贏
當 m 為奇數時,
開始 (m1, m2...mn) xor(...) != 0 比如不為 0 , 因為至少有 1 位為1
而當 xor != 0 時, 總是可以將其一步變成 0
而 xor == 0 時, 任意的挪動都會將其變成非 0
所以, 當 m 為奇數時, 先拿著必贏
程式設計之美 第一章 1 12拈石遊戲分析
拈石遊戲分析 有n塊石頭和兩個玩家a和b,玩家a先將石頭分成若干堆,然後按照baba.的順序不斷輪流取石頭,能將剩下的石頭 一次取光的玩家獲勝。每次取石頭的時候,每個玩家只能從若干堆石頭中任選一堆,取這一堆石頭中任意數目 大於0 個石頭。問 玩家a要怎樣分配和取石頭才能保證自己有把握取勝?經分析得出...
程式設計之美 「拈」遊戲系列一 一排石頭的遊戲
這個題目來自於程式設計之美上的nim 1 一排石頭的遊戲,該類問題能考察面試者的思維,往往是兩個人玩的乙個遊戲,具體形式公司可以具體設定,這裡題目的意思是取石頭的數目有規定,也可以使報數每次只能增加幾個數字等。該類題目往往是要把最後乙個取完石頭定位為贏或者輸。該類題目第乙個取石頭的人占有主動權也有被...
程式設計之美 1 7 光影切割問題
1.7 光影切割問題 不少人很愛玩遊戲,例如 cs 遊戲設計也成為程式開發的熱點之一,我們假設要設計破舊倉庫之類的場景作為戰爭遊戲的背景。倉庫的地面會因為陽光從屋頂的漏洞或者視窗照射進來而形成許多光照區域和陰影區域。為了簡單起見,假設不同區域的邊界都是直線 我們把這些直線都叫做 光影線 並且不存在三...