我在编码比赛中正在做一个谜题,而且我一直坚持一个问题。基本上我不明白有人能够达到这个解决方案。这个难题是
Alice和Bob玩下面的游戏。他们选择N号来玩。规则如下:
假设两者都发挥得最佳,谁赢了比赛?
给定的解决方案是
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");
}
}
答案 0 :(得分:6)
这是一种Nim游戏。最终面临N = 1
的玩家输了。如果N % 4 != 1
,Bob可以使用1,2或3来制作下一个N ≡ 1 (mod 4)
,让Alice处于失败位置。否则,如果在开始时N ≡ 1 (mod 4)
,Alice可以反击Bob的移动,为Bob再次留下≡ 1 (mod 4)
号码。