1. When you can win Nim
Say there are s = 4n + i (i = 1, 2, 3) stones on the table.
1.1 Initial state
Consider the case where n = 0, there are at most 3 stones on the table. You take the first turn to remove all the stones, then you win.
1.2 Deduction state
Suppose s = 4n + i (i = 1, 2, 3) stones on the table, you could we the game.
Consider the case where k = n + 1. There are s = 4(n+1) + i (i = 1, 2, 3) stones on the table.
1. You could always take the first turn to remove i stones.
2. Then the opponent take the next turn to remove whatever stones he wants.
The number of stones remaining is between (4n, 4n+4), which is 4n + i (i = 1, 2, 3). Thus when s = 4(n+1) + i (i = 1, 2, 3), you could win this game also.
2. When you will lose
Say there are s = 4n stones on the table.
2.1 Initial state
Consider the case where n = 1, there are 4 stones on the table.
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.
2.2 Deduction state
Suppose s = 4n stones on the table, you will lose the game.
Consider the case where k = n + 1. There are s = 4n + 4 stones on the table.
1. Say you remove i stone(s) on your first turn.
2. Your opponent could remove (4-i) stone(s).
The number of stones remaining is 4n, which we has proved that you will lose the game.
3. Conclusion
#(stones) = 4n + i (i = 1, 2, 3), you win.
#(stones) = 4n, you lose.
4. Source
class Solution(object):
def canWinNim(self, n):
return n % 4 != 0
本文介绍了如何在LeetCode的292题Nim游戏中获胜。当桌上石头数量为4n+i(i=1,2,3)时,你可以在第一轮移除i个石头,使对手在4n的数量范围内无法赢得游戏,从而确保胜利。反之,如果石头数量为4n,无论你如何移除,对手总能通过策略使得剩余数量回到4n,导致你输掉游戏。"
64123009,1358276,Perl使用HTML::TreeBuilder::XPath解析HTML,"['Perl编程', 'HTML解析', 'XML技术', '数据处理']
335

被折叠的 条评论
为什么被折叠?



