292. Nim游戲(Python)

題目

難度:★★☆☆☆
類型:數(shù)學(xué)

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

你們是聰明人,每一步都是最優(yōu)解。 編寫一個(gè)函數(shù),來判斷你是否可以在給定石頭數(shù)量的情況下贏得游戲。

示例

輸入: 4
輸出: false
解釋: 如果堆中有 4 塊石頭,那么你永遠(yuǎn)不會(huì)贏得比賽;
因?yàn)闊o論你拿走 1 塊、2 塊 還是 3 塊石頭,最后一塊石頭總是會(huì)被你的朋友拿走。

解答

這是道有趣的智力題。我們首先考慮什么情況下能贏,從示例可以看到,當(dāng)只剩下4塊石頭時(shí),輪到誰拿誰輸,因?yàn)榱硪粋€(gè)人總是可以把剩下的石頭全部拿完。

那么勝利目標(biāo)就成為希望自己拿走石頭后保證還剩4塊石頭,怎樣才能做到呢?同樣的道理,只需要還剩8塊石頭的時(shí)候輪到了對(duì)方拿,那么不管對(duì)方拿多少,1個(gè)2個(gè)或者3個(gè),自己拿的時(shí)候都可以保證只剩4塊石頭,那怎么保證還剩8塊石頭的時(shí)候輪到了對(duì)方拿呢……

綜上,我們可以得出,只要我們能夠保證自己這輪拿走石頭后,剩余的石頭個(gè)數(shù)是4的整數(shù)倍,這時(shí)輪到誰拿誰輸,就可以逼死隊(duì)友,這樣問題就很簡(jiǎn)單,如果給定的石頭個(gè)數(shù)不是4的整數(shù)倍,那么這種情況就穩(wěn)勝,否則就會(huì)輸(如果隊(duì)友掌握了以上技巧的話)。

class Solution(object):
    def canWinNim(self, n):
        """
        :type n: int
        :rtype: bool
        """
        return n % 4 != 0

如有疑問或建議,歡迎評(píng)論區(qū)留言~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容