C 理解这个谜题的答案
我在一个编码比赛中做了一个拼图游戏,我被一个问题困住了。基本上,我不明白一个人是如何达到这个解决方案的。谜题是 爱丽丝和鲍勃玩下面的游戏。他们选择一个数字N来玩。规则如下:C 理解这个谜题的答案,c,algorithm,puzzle,primes,C,Algorithm,Puzzle,Primes,我在一个编码比赛中做了一个拼图游戏,我被一个问题困住了。基本上,我不明白一个人是如何达到这个解决方案的。谜题是 爱丽丝和鲍勃玩下面的游戏。他们选择一个数字N来玩。规则如下: 鲍勃先上场,两名队员轮流上场 在他/她轮到的时候,玩家可以从N中减去任何小于N的素数(包括1)。由此得到的数字就是新的N 在他/她的回合中不能移动的人将输掉比赛 假设双方都发挥最佳状态,谁会赢得比赛 给出的解是 int main() { long int T, N; for(scanf("%ld", &T);
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");
}
}
这是一种游戏。最终面对
N=1
的玩家输了。如果N%4!=1,Bob可以选择1、2或3进行下一次N≡ 1(mod 4)
,使Alice处于失败的境地。否则,如果N≡ 1(mod 4)
开始时,Alice可以反击Bob留下一个数字的举动≡ 1(mod 4)
再次为Bob。这是一种游戏。最终面对N=1
的玩家输了。如果N%4!=1,Bob可以选择1、2或3进行下一次N≡ 1(mod 4)
,使Alice处于失败的境地。否则,如果N≡ 1(mod 4)
开始时,Alice可以反击Bob留下一个数字的举动≡ 1(mod 4)
又是Bob。什么比赛?它还在继续吗?如果比赛仍在进行,问如何解决比赛中的问题是非常不道德的(因为这对那些真正试图按照规则解决问题的人来说是不公平的——他们自己解决)。不不,这是codechefI提出的一个实践问题。我很高兴听到这个问题。你还应该链接到具体的问题。这可能不是你的措辞,但我鄙视“一个玩家可以从N减去任何小于N的素数(包括1)”。1不是素数@阿米特:什么比赛?它还在继续吗?如果比赛仍在进行,问如何解决比赛中的问题是非常不道德的(因为这对那些真正试图按照规则解决问题的人来说是不公平的——他们自己解决)。不不,这是codechefI提出的一个实践问题。我很高兴听到这个问题。你还应该链接到具体的问题。这可能不是你的措辞,但我鄙视“一个玩家可以从N减去任何小于N的素数(包括1)”。1不是素数@amit如果我们不减去素数,而是减去数字的除数,那该怎么办呢?这要复杂得多。我不认为有一个简单的方法来确定一个首发球员可以从哪个价值观出发,用这个规则来赢得比赛,但我还没有深入分析这个问题。但听起来很有趣。事实上,@neel,划破它,这很容易。如果N
为偶数,则起始玩家可以强制获胜(始终取1)。从奇数的N
,开始的玩家输了。如果N
是奇数,每个除数也是奇数,那么下一个玩家剩下一个偶数(获胜)。@neel:关于你问题的“如何才能得到这个解决方案”部分:“通过反向工作”,如答案所示。也就是说,这些问题通常是通过找到一个小案例来解决的,这个案例对于一个玩家来说是一个胜利的案例,然后反向工作,看看一个玩家是如何迫使这种情况发生的。如果我们不减去素数,而是减去数的除数,该怎么办?这要复杂得多。我不认为有一个简单的方法来确定一个首发球员可以从哪个价值观出发,用这个规则来赢得比赛,但我还没有深入分析这个问题。但听起来很有趣。事实上,@neel,划破它,这很容易。如果N
为偶数,则起始玩家可以强制获胜(始终取1)。从奇数的N
,开始的玩家输了。如果N
是奇数,每个除数也是奇数,那么下一个玩家剩下一个偶数(获胜)。@neel:关于你问题的“如何才能得到这个解决方案”部分:“通过反向工作”,如答案所示。也就是说,这些问题通常是通过找到一个小案例来解决的,这个案例对其中一个玩家来说是一个胜利,然后回过头来看看一个玩家如何迫使这种情况发生。