1

我在编码比赛中做一个谜题,我被困在一个问题上。基本上我不明白有人怎么能达到这个解决方案。谜题是

爱丽丝和鲍勃玩以下游戏。他们选择一个数字 N 来玩。规则如下:

  1. 鲍勃先上场,两名球员轮流上场。
  2. 轮到他/她,玩家可以从 N 中减去任何小于 N 的素数(包括 1)。这样得到的数字就是新的 N。
  3. 轮到他/她不能移动的人输掉比赛。

假设双方都发挥最佳,谁会赢得比赛?

给定的解决方案是

int main() {
  long int T, N;
  for(scanf("%ld", &T); T > 0; T--) {
    scanf("%ld", &N);
    if (N % 4 == 1) {
      printf("ALICE wins\n");
    } else {
      printf("BOB wins\n");
    }
}
4

1 回答 1

6

这有点像尼姆游戏。最后面对的玩家N = 1输了。如果N % 4 != 1,Bob 可以拿 1、2 或 3 来做下一个N ≡ 1 (mod 4),让 Alice 处于失败的位置。否则,如果N ≡ 1 (mod 4)一开始,爱丽丝可以反击鲍勃的举动,≡ 1 (mod 4)再次为鲍勃留下一个号码。

于 2012-11-11T16:07:19.513 回答