巴什博弈问题
问题描述:你正在和朋友玩一个游戏:桌子上有一堆石头,每一次你们都会从中拿出1到3个石头。拿走最后一个石头的人赢得游戏。游戏开始时,你是先手。
假设两个人都绝对理性,都会做出最优决策。给定石头的数量,判断你是否会赢得比赛。
设石头总共有n颗,最多能拿m颗
当n<=m时,先手一定赢
当n=m+1后手一定赢
当m+1<n<2*(m+1)时,设第一人拿走n-m-1个,还剩 m+1个,但最多只能拿m个,无论后手拿几个,总有剩余,先手一定赢
当n=m+1的倍数时,后手一定赢 以此类推,
当n为m+1的倍数时,后手赢,反之,先手赢
举例:有四个石头,那么你永远不会赢得游戏。不管拿几个,最后一个石头一定会被你的朋友拿走。
public class Solution {
public boolean canWinBash(int n) {
if(n%4 == 0){
return false;//后手必赢
}
else return true;
}
}