Nim Game(leetcode)

来源:互联网 发布:美少女梦工厂4工作数据 编辑:程序博客网 时间:2024/06/08 02:30

Nim Game

  • 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;        }    }};
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 父母离异后房产怎么办 夫妻离婚后孩子怎么办 离婚小孩的户口怎么办 离婚孩子落户口怎么办 父母离婚孩子出生证怎么办 离婚怎么办孩子的户口 离婚了儿子户口怎么办 性格不合离婚 孩子怎么办 前夫不迁走户口怎么办 我想离婚老婆不同意怎么办 要离婚没身份证怎么办 老婆怀孕想离婚怎么办 我老婆起诉离婚怎么办 父母冷战我该怎么办 经常跟父母亲吵架怎么办 14岁父母离婚怎么办 夫妻为钱吵架怎么办 离婚后担心孩子怎么办 不爱对方有孩子怎么办 爸和大伯吵架怎么办 孩子和家长吵架怎么办 老公吵架摔东西怎么办 楼上吵架摔东西怎么办 宿友没素质的人怎么办 父母人品差自私怎么办 家里穷压力大怎么办 偏执型人格障碍怎么办 遇到低素质保安怎么办 和老婆性格不合怎么办 当心理阴暗时怎么办 孩子胆子小怎么办呢? 父母伤亡的孩子怎么办 小孩上课老是走神怎么办 小孩上课老走神怎么办 小孩上课爱走神怎么办 孩子对学习成绩无所谓怎么办 孩子脾气特别倔强怎么办 没有规矩的孩子怎么办 孩子情商太低怎么办 4岁宝宝缺乏自信怎么办 孩子害羞不自信怎么办