[292] Nim Number

1. 题目描述

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.

题目描述了一个游戏,游戏内容为给定一定数量的石头,两人交替从中取得1-3块石头,当前给定石头的数量n,给出算法,若我为先手,判定我是否有可能赢得游戏。

2. 解题思路

乍一看这个游戏是个人工智能的游戏,仔细看题目给出的例子,当我目前数量为4时,无论我拿1、2、3个都不可能赢得这个游戏,那么我们往后看一看,当前若为5、6、7个石头,那么只要我拿1、2、3个,使之达到4,那么对手是不可能赢的,所以在这种情况下,我有赢得可能,若当前为8个石头,那么我无论拿1、2、3个,对手都有可能在下一手剩下4个石头,那么我就没有赢的可能性了,依此类推,发现只要当前剩余数量是4的倍数,那么对方都有可能让我无法赢得游戏,所以算法就很简单了,下面给出代码。

3. Code

class Solution {
public:
    bool canWinNim(int n) {
        if(n%4 != 0){
            return true;  // 可能赢
        }
        return false;  // 不可能赢
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值