[292] Nim Number

来源:互联网 发布:淘宝嘉贝逸飞旗舰店 编辑:程序博客网 时间:2024/06/09 22:35

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