Leetcode刷題筆記 1025 除數博弈

2021-10-08 11:23:57 字數 1338 閱讀 9647

知識點:找規律

題目

愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。

最初,黑板上有乙個數字 n 。在每個玩家的回合,玩家需要執行以下操作:

選出任一 x,滿足 0 < x < n 且 n % x == 0 。

用 n - x 替換黑板上的數字 n 。

如果玩家無法執行這些操作,就會輸掉遊戲。

只有在愛麗絲在遊戲中取得勝利時才返回 true,否則返回 false。假設兩個玩家都以最佳狀態參與遊戲

示例1

輸入

2輸出

true

說明:

愛麗絲選擇 1,鮑勃無法進行操作。

示例2

輸入

3輸出

false

說明:

愛麗絲選擇 1,鮑勃也選擇 1,然後愛麗絲無法進行操作。

解法

a代表愛麗絲 b代表鮑勃

情況一. 當n = 1時,a無法選出x,a敗b勝。先選的輸

情況二. 當n = 2時,a先執行,選擇x=1,到b執行,變成情況1,b先選,b輸。先選的勝

情況三. 當n = 3時,a先執行,選擇x=1,到b執行,變成情況2,先選的勝可知b勝。先選的輸

情況四. 當n = 4時,a先執行,可選擇x=1或者x=2,當x=1時,到b選擇變成情況3,b先選,b輸;當x=2,到b選擇變成情況2,b選,b勝,由於最佳狀態參與遊戲,所以還是a勝

假設:n是偶數,先選的勝,n是奇數,先選的敗

證明:假設 n≤k 時該結論成立,則n=k+1 時:

如果k為偶數,則k+1為奇數,x是k+1的因數,只可能是奇數,而奇數減去奇數等於偶數,所以到b的時候都是偶數。而根據我們的猜想假設n≤k的時候偶數的時候,先手必贏,所以a敗b勝。

如果k為奇數,則k+1為偶數,x可以是奇數也可以是偶數,若減去乙個奇數,那麼k+1−x是乙個小於等於k的奇數,此時b選,b輸,所以a勝b敗

**

#include

#include

using

namespace std;

class

solution};

intmain()

今天也是愛zz的一天哦!

LeetCode刷題筆記 102

題目 二叉樹的層次遍歷 給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 157返回其層次遍歷結果 3 9,20 15,7 答案 1.迭代 將結點按層次依次放入佇列結構中。當佇列非空時 1 新建乙個空...

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...

LeetCode刷題筆記

實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...