取石子游戏
取石子游戏
题目
你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。
你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。
输入示例
输入: 4
输出: false
解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。
解题思路
- 当
n为1-3时,先手可以获得胜利。 - 当
n为4时,后手胜利。 - 当
n等于5时,先手拿1,n就变成了4,直接变成第二种情况的后手,所以n为5的时候先手。 - 当
n等于6时,先手拿2。 - 当
n等于7时,先手拿3。 - 当
n为8时,后手赢。
从而得出结论,
n为4的倍数的时候,后手赢,除此之外,先手赢。
代码
public boolean helper(){
if(n>0){
if(n%4==0) return false;
return true;
}
return false;
}
拓展
每个人可以拿1-k个,n为k+1的倍数时,后手胜利,否则先手胜利。

浙公网安备 33010602011771号