Nim Game(leetcode)

Nim Game


题目

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.

For example, 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.


解析

Nim Game的游戏规则为每人每次可以拿走1 - 3块石头,胜者为拿走最后一块石头的人。
我们可以从中得到:假设有两个人A、B在玩Nim Game,A先拿,判断A是否能够获胜。

  1. 石头总数为1时,A拿走1块石头,A取得胜利
  2. 石头总数为2时,A拿走2块石头,A取得胜利
  3. 石头总数为3时,A拿走3块石头,A取得胜利
  4. 石头总数为4时,无论A拿走多少块石头,A都无法取得胜利 (A->3, B->1; A->2, B->2; A->1, B->3)
  5. 石头总数为5时,A先拿走1块石头,无论B拿走多少块石头,最终都是A取得胜利
  6. 石头总数为6时,A先拿走2块石头,无论B拿走多少块石头,最终都是A取得胜利
  7. 石头总数为7时,A先拿走3块石头,无论B拿走多少块石头,最终都是A取得胜利
    …………

观察上面可以知道,当剩余石头的块数是4的倍数的时候,需要拿石头的人游戏胜利无望。因此,想要在这个游戏中赢,必须使得当对手拿石头的时候,剩余的石头总数是4的倍数。
因此,一开始判断自己是否能在游戏中胜出,那么只需判断此时的石头总数是否为4的倍数。


解决

class Solution {
public:
    bool canWinNim(int n) {
        if (n % 4 == 0) {
            return false;
        } else {
            return true;
        }
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值