292Nim 遊戲(智力題)

2021-10-11 17:36:24 字數 913 閱讀 4477

1、題目描述

你和你的朋友,兩個人一起玩 nim 遊戲:

桌子上有一堆石頭。

你們輪流進行自己的回合,你作為先手。

每一回合,輪到的人拿掉 1 - 3 塊石頭。

拿掉最後一塊石頭的人就是獲勝者。

假設你們每一步都是最優解。請編寫乙個函式,來判斷你是否可以在給定石頭數量為 n 的情況下贏得遊戲。如果可以贏,返回 true;否則,返回 false 。

2、示例

輸入:n = 4

輸出:false 

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

3、題解

智力題:如果堆中石頭的數量n不能被4整除,那麼你總是可以贏得nim遊戲的勝利。

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

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

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

#include#includeusing namespace std;

class solution

};int main()

LeetCode演算法題292 Nim遊戲解析

你和你的朋友,兩個人一起玩 nim遊戲 桌子上有一堆石頭,每次你們輪流拿掉 1 3 塊石頭。拿掉最後一塊石頭的人就是獲勝者。你作為先手。你們是聰明人,每一步都是最優解。編寫乙個函式,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。示例 輸入 4 輸出 false 解釋 如果堆中有 4 塊石頭,那麼你...

Leetcode實戰 292 Nim 遊戲

你和你的朋友,兩個人一起玩 nim 遊戲 桌子上有一堆石頭,每次你們輪流拿掉 1 3 塊石頭。拿掉最後一塊石頭的人就是獲勝者。你作為先手。你們是聰明人,每一步都是最優解。編寫乙個函式,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。示例 輸入 4輸出 false 解釋 如果堆中有 4 塊石頭,那麼你...

力扣題解 292 Nim 遊戲

292.nim 遊戲 你和你的朋友,兩個人一起玩 nim 遊戲 桌子上有一堆石頭,每次你們輪流拿掉 1 3 塊石頭。拿掉最後一塊石頭的人就是獲勝者。你作為先手。你們是聰明人,每一步都是最優解。編寫乙個函式,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。示例 輸入 4輸出 false解釋 如果堆中有...