Nim游戏/canWinNim.php
<?php

/*
博弈论中的 巴什博奕
博弈分析
我们从最简单的情景开始分析
当石子有1-m个时，毫无疑问，先手必胜
当石子有m+1个时，先手无论拿几个，后手都可以拿干净，先手必败
当石子有m+2-2m时，先手可以拿走几个，剩下m+1个，先手必胜
我们不难发现，面临m+1个石子的人一定失败。
这样的话两个人的最优策略一定是通过拿走石子，使得对方拿石子时还有m+1个
我们考虑往一般情况推广
设当前的石子数为n=k*(m+1)+r
先手会首先拿走r个，接下来假设后手拿走x个，先手会拿走m+1-k个，这样博弈下去后手最终一定失败
设当前的石子数为n=k*(m+1)
假设先手拿x个，后手一定会拿m+1-x个，这样下去先手一定失败

你和你的朋友，两个人一起玩 Nim 游戏：桌子上有一堆石头，每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。

你们是聪明人，每一步都是最优解。 编写一个函数，来判断你是否可以在给定石头数量的情况下赢得游戏。

示例:

输入: 4
输出: false
解释: 如果堆中有 4 块石头，那么你永远不会赢得比赛；
     因为无论你拿走 1 块、2 块 还是 3 块石头，最后一块石头总是会被你的朋友拿走。
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/nim-game
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
$n = 5;
var_dump(canWinNim($n));
function canWinNim($n)
{
    return $n % 4 != 0; // 本题规律的答案
}
