巴什博奕:
巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。
如果有m+1个物品,那么无论第一个人如何拿取,第二个人都会全部拿走。
因此如果我们一直让第二个人一直保持m+1的状态,那么一定会赢。
然后我们可以推导出获胜法则:n=(m+1)r+s;(r为任意整数,0<s<=m,);
第一个人第一次要取走s件物品,如果第二个人取走k件物品,那么第一个人就要取走m+1-k件物品,使对手始终面临 (m+1)r 的局面。最终使对手面临 (m+1) 的状态。
解决方案:
public boolean canWin(int n) { return n%(m+1)!=0;
}