LeetCode 292——Nim遊戲(找規律)

一、題目介紹

你和你的朋友,兩個人一起玩 Nim 遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作爲先手。

你們是聰明人,每一步都是最優解。 編寫一個函數,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。

示例:

輸入: 4
輸出: false 
解釋: 如果堆中有 4 塊石頭,那麼你永遠不會贏得比賽;
     因爲無論你拿走 1 塊、2 塊 還是 3 塊石頭,最後一塊石頭總是會被你的朋友拿走。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/nim-game
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

二、解題思路

如果石頭堆中只有一塊、兩塊、或是三塊石頭,那麼在你的回合,你就可以把全部石子拿走,從而在遊戲中取勝。而如果就像題目描述那樣,堆中恰好有四塊石頭,你就會失敗。因爲在這種情況下不管你取走多少石頭,總會爲你的對手留下幾塊,使得他可以在遊戲中打敗你。因此,要想獲勝,在你的回合中,必須避免石頭堆中的石子數爲 4 的情況。

同樣地,如果有五塊、六塊、或是七塊石頭,你可以控制自己拿取的石頭數,總是恰好給你的對手留下四塊石頭,使他輸掉這場比賽。但是如果石頭堆裏有八塊石頭,你就不可避免地會輸掉,因爲不管你從一堆石頭中挑出一塊、兩塊還是三塊,你的對手都可以選擇三塊、兩塊或一塊,以確保在再一次輪到你的時候,你會面對四塊石頭。

顯然,它以相同的模式不斷重複 n=4,8,12,16,…, n=4,8,12,16,…,基本可以看出是 4的倍數。

三、解題代碼

class Solution {
public:
    bool canWinNim(int n) {
        return n % 4;
    }
};

四、解題結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章