ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

292. Nim Game

2021-04-09 13:03:55  阅读:243  来源: 互联网

标签:对方 4n Nim 石子 面临 Game 292 Your friend


问题:

给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

我们进行反向推演:

  • 若轮到我时:
    • 最后剩下1~3个石子,那么我一定赢。
    • 剩下4个石子,那我不管取1~3个石子,我一定会留下1~3个石子,使得对方赢。

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

 

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

  • 那么怎样才能让对方面临4个石子呢?
    • 那就是:
    • 轮到我时,让我能够面临:5~7个石子,那么我就一定能取到,使得对方面临4个石子。
  • 继续:怎样才能让我面临5~7个石子呢?
    • 那么:
    • 轮到对方时,让对方面临:8个石子,不管对方怎么取,都一定会剩下5~7个石子。

……

 

总结:

为了让我赢:那就要对方面临: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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有