1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 思路: 这是一道数学题 拿走最后一块石头的人获胜,也就是说获胜的人最后一轮得到的石头数量为1,2,3 所以只有将4块是否交给对方才能一定获胜, 对方会用各种方法将4交到我方 自己是先手,所以胜利范围是1,2,3 + 4*n 如果能被4整除,最后一定能将4交到我方,因为双方范围是1-3,无论己方拿几块石头,对方都可以让数量变成4的倍数
先手方想赢,必须把石头控制成4的倍数给后手方,这样对方不可能控制成4的倍数返回 后手方想赢,必须要石头控制成4的倍数给先手方,取决于一开始的时候是不是4的倍数,如果是,则先手方拿取石头后一定不是4的倍数
代码: /** * @param Integer $n * @return Boolean */ function canWinNim($n) { return $n % 4 != 0; }
|