当前位置: 首页 > 工具软件 > nimgame2 > 使用案例 >

LeetCode292 Nim Game 拈游戏

通建安
2023-12-01

1. problem description

You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.

Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.

example:

Input: 4
Output: false
Explanation: If there are 4 stones in the heap, then you will never win the game;
No matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.

2. solution

2.1 problem-solving ideas

本题实际上通过数学总结规律 优于 代码编码解决问题。
我们假设有n个石头,每次能拿 [1, m] 个。
那么我们以m为固定量,n为变量,跟随n的变化来研究情况:

  • n = m+1 时:败局;
  • m+2 ≤ n ≤ 2m+1 时:胜局,胜者可以通过使败者面对m+1个而获得败局而失败;
  • n = 2m+2:败局
  • 2(m+1)+1 ≤ n ≤ 3(m+1)-1时:胜局,通过使失败者面对2m+2的败局开头而失败;
  • ……

2.2 code

class Solution {
public:
    bool canWinNim(int n) {
        
    }
};
 类似资料: