【力扣日記】292 Nim遊戲 | 腦筋急轉彎 數學規律

做這道題時想到當初和我哥玩的遊戲,每個人都只能報出1-3,兩人輪換,從0開始,誰能報數22誰贏。

題目描述

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

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

算法

看到題本來是懵逼的,但是看到例子突然有了思路。

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

易知,n=1~3,先手贏;n=4,後手贏;n=5,此時先手拿1,n=4,先手變後手,先手贏。
推到n=8,此時後手贏。

易知n爲4的倍數,後手贏,除此,先手一定贏。

很容易得到算法:

        if n>0:
            if n%4==0:return False
            return True
        return False
        if n==0:return False
        return True if n%4!=0 else False

考慮到n本就不應該爲0,所以最終結果:

        return n%4

拓展

我想如果規則是先手拿走1~4,那麼n=5時一定是後手贏,所以拓展規則應該是:
對規則要求每次拿走1~k個石子,石子數n爲k+1的倍數時後手贏。除此,先手必須保證他第一步拿走石子後石子總數爲k+1的倍數,這樣先手一定贏。

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