Nim Game---292

来源:互联网 发布:数据库实训总结 编辑:程序博客网 时间:2024/06/08 17:05

题目大意:你和朋友做游戏,大家轮流从一堆石头中拿1~3个石头,拿到这堆石头中的最后一个石头的人就赢得比赛。也就是说,这个游戏2个人玩,从你先开始拿,那么这堆石头有多少个的情况下你绝对能赢得游戏呢?题目要求输入石头的总共个数,得出你是否能赢得比赛,赢返回true,输返回false。

题目分析:还是数学问题。我们还是来画图找规律啦!N表示这堆石头里的个数。后面是怎么拿石头的过程

N=1     1 赢

N=2     2 赢

N=3     3 赢

N=4     T^T 输

N=5     1(必须只能拿一个,后面随意拿,拿一个后就变成了4个,不就是N=4的情况么,谁先拿谁输) 赢

N=6     2(仍然把局变成N=4的情况,谁先拿谁输,哈哈) 赢

N=7     3(仍然把局变成N=4的情况,谁先拿谁输,哈哈) 赢

N=8     T^T(不论我开始拿几个,别人都会让下次我拿的那一轮变成N=4的局) 输

.

.

.

N=12   T^T(3*4=12,我先拿对手把剩余的变成是N=8的局) 输

朋友们,总结起来,就是当我先拿,只要剩下的没有机会让对手将剩下的石头弄成N=4的局或者N=4*n就肯定是我赢,程序显然就有思路了。

class Solution {public:    bool canWinNim(int n)     {        if((n-4)%4==0)return false;elsereturn true;    }};

值得提一句的是,在返回true的那一句,(n-4)%4的值也是你第一步必须拿的石头的个数,才能赢得这局比赛哦!

0 0