LeetCode *** 292. 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.


大意:
桌子上有一堆石头,每次只能移走1-3颗,最后移走所有棋的人获胜,A先挪走。A与B永远选择最优策略,那么请问对于给定的石头数目确定A是否能够获胜。

分析:
因为题目要求是双方每次零失误,都选择最优策略,那意味着双方挪走石头水平并没有任何差别,那么对于A来说是失败的数目,对B同样也意味着失败。A是第一个挪走石头的人,在这局游戏中占据优势。(游戏失去公平性)
那么可以列一个表格,
数目对A的是否有利
1true
2true
3true
4false
5true
6true
7true
8false
9true
10true
11true
12false
如上,事实上可以看见一定规律。当石子为1-4时,A为赢赢赢输的顺序,当石子数目为5-8时,此时A如果想要让自己赢,就要让B处于面对4石子的局面,那么A最终同样会处于赢赢赢输的顺序。依次,故最后A的胜利与否只与是否为4的倍数有关。

代码:

bool canWinNim(int n) {
    if(n%4)return true;
    else return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值