使用模数使用接近算法

时间:2016-11-22 22:15:05

标签: algorithm modulo

我正在做一些编码挑战,并且出现了一个大致上说的问题:

  

“两名球员各自轮流从第一名球员开始。有N名球员   给出的棍棒,每个球员轮到他们,需要1,2或3支棍棒   玩家拿最后一根棍子输了,目标是找到一个算法   让玩家一次确定获胜(并非总是可能,玩家2应该轮流以确保胜利)并输出1,2或3作为   如果不可能获胜,则采取棍棒的起始量或0。   输入为N.示例:输入:2输出:1“

我试着想一想,但我想出的只是检查每一个可能的结果,因为如果N很大,所有的可能性都可以链接在一起。我还认为,如果最后一根棍子被玩家2拿走以便不输,则N-1被玩家1拿走(无论是仅采用N-1还是采用N-1,N-2或N 1,N-2,N-3)将N留给玩家2,这是确保胜利的唯一方法。 原来,解决方案是(N-1)mod 4,但我不明白为什么会这样。

所以我的问题是你如何处理这样的问题,为什么解决方案是模数?还有一种方法可以发现像这样的模数问题吗?其他程序员很快就做到了,所以我认为练习很完美,但我不知道从哪里开始。

1 个答案:

答案 0 :(得分:1)

它是模4,因为如果一个玩家具有优势,如果第一个玩家拿1分,他可以保持相同的优势,如果第一个玩家拿2分,则可以保持相同的优势,如果第一个玩家拿3分,则可以保持1个。另一个玩家根本就没有任何控制权。

向后解决问题:

你不必关心大N,你只需要分析只剩下4支或更少的情况。

当剩下1支,2支,3支或4支时,谁会获胜?

当剩下4n + 1,4n + 2,4n + 3或4n + 4支时谁将获胜?