其他分享
首页 > 其他分享> > 292. Nim Game

292. Nim Game

作者:互联网

问题:

给n个石子,由你开始选取,和你的朋友轮流进行。

每次选取,可以选取1~3个石子,

最后一个取完石子的人获胜,返回你是否能赢得胜利。

Example 1:
Input: n = 4
Output: false
Explanation: These are the possible outcomes:
1. You remove 1 stone. Your friend removes 3 stones, including the last stone. Your friend wins.
2. You remove 2 stones. Your friend removes 2 stones, including the last stone. Your friend wins.
3. You remove 3 stones. Your friend removes the last stone. Your friend wins.
In all outcomes, your friend wins.

Example 2:
Input: n = 1
Output: true

Example 3:
Input: n = 2
Output: true
 
Constraints:
1 <= n <= 2^31 - 1

  

解法:math

我们进行反向推演:

即谁面临4个石子,谁输。

 

那么假使为了让我一定赢,那么一定得使得对方面临4个石子。

……

 

总结:

为了让我赢:那就要对方面临:4,8,12... 4n 个石子。

如果一开始就是我面临4n个石子,对方也是聪明的,对方就不会留给我,能够使得对方自己面临4n个石子的机会。

所以,只要一开始我就面临4n个石子,最后就只能输了。

否则,我就一定不会让自己接下来面临4n个石子。

 

答案即是:若4%n==0,那我就一定输,否则一定赢。

 

代码参考:

1 class Solution {
2 public:
3     bool canWinNim(int n) {
4         return n%4!=0;
5     }
6 };

 

标签:对方,4n,Nim,石子,面临,Game,292,Your,friend
来源: https://www.cnblogs.com/habibah-chang/p/14636622.html