取石子游戏

取石子游戏

题目

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

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

输入示例

输入: 4
输出: false
解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。

解题思路

  1. n1-3时,先手可以获得胜利。
  2. n为4时,后手胜利。
  3. n等于5时,先手拿1,n就变成了4,直接变成第二种情况的后手,所以n为5的时候先手。
  4. n等于6时,先手拿2。
  5. n等于7时,先手拿3。
  6. n为8时,后手赢。

从而得出结论,n为4的倍数的时候,后手赢,除此之外,先手赢。

代码

public boolean helper(){
  if(n>0){
    if(n%4==0) return false;
    return true;
  }
  return false;
}

拓展

每个人可以拿1-k个,nk+1的倍数时,后手胜利,否则先手胜利。

posted @ 2022-04-04 14:44  LibraXiong  阅读(499)  评论(0)    收藏  举报