【发布时间】:2011-05-08 13:11:49
【问题描述】:
好的,我必须制作一个 nim 游戏,并尝试通过以下 nim 游戏找到始终获胜的策略:
21 场比赛,玩家 1 和 2 每回合分别进行 1、2、3、4 或 5 场比赛,并且不能与前一名玩家进行相同数量的比赛。如果/当他们参加最后一场比赛,则玩家获胜。
我必须为此编写一些程序,但我什至不明白要开始。我怎样才能找到这种类型的 nim 游戏的获胜策略?
编辑:
所以我认为当你打到 7 场比赛仍然在中间时你总是会赢的。另一个可以取 2-5 个,你最多可以加 7 个取最后一个。当另一个拿 1 时,你拿 3(另一个不能拿 3)并且必须选择 1 或 2,在这种情况下,你会得到 alst 并获胜。
但是,从 21 点到 7 点对我来说是一个难题,我无法弄清楚你如何总是成为 7 点的人。
编辑 2: 好的,所以如果没有规则,你不能像以前的玩家一样,我认为这很简单。
你会让 k = 5 + 1 = 6。那么你应该做第一个动作,让匹配离开然后 % 6 = 0。所以在这种情况下,先取 3,然后再填充另一个的移动玩家到 6。但是在这种情况下,这是行不通的,因为其他玩家可以拿 3,之后你不能拿 3 来填满 6。所以这是我的问题。有什么想法吗?
EDIT3:
好吧,你说我可以强制进行 7 场比赛。但是,假设我对 14-7 匹配步骤采取相同的想法。 (然后轮到对方)
那么有两种情况: 1:他拿了2-5,我把它填到7,让7在那里,我赢了。 2:他拿了 1,所以还剩 13 个。当我像在(7-0)步骤中那样拿 3 时,它变成 10。然后他拿 5,我不能再拿 5 来完成,我会松动。
这就是问题所在,场景 2 在 (7-0) 步骤中没有问题,现在是。我该如何解决?
是的,解决方案:
顺便说一句,na speler 1 的意思是:在玩家 1 的回合等之后(我是荷兰人)。
好的,所以我尝试了一些方法,我认为我有解决方案。您必须首先参加一场比赛作为第一个球员。然后其他人可以参加2-5场比赛。您匹配(双关语)他的数量最多为 7,因此您将始终在中间留下 (21-1-7=) 13 个匹配项。然后再次轮到玩家 2,有两种情况:玩家 2 进行 1、2、4 或 5 场比赛,在这种情况下,您参加的比赛数量与剩下的 7 场一样多。 (如前所述,当您进行比赛时,剩下 7 场比赛,您将永远获胜)。第二种情况是玩家 2 需要 3 场比赛,在这种情况下,轮到你时中间有 10 场比赛。你不能拿 3 来做 7,因为你不能拿 2 倍的相同数量。所以你取 5,所以剩下 5 个。玩家 2 不能拿 5 取胜,必须选择 1-4 之后才能取其余的取胜。
这是我猜的解决方案。我不知何故来到了它,因为我注意到了这一点:
具有模数等的普通 Nim 游戏:
P2 1 2 3 4 5
P1 5 4 3 2 1
------------------
6 6 6 6 6
但是你不能在这里做 3,3 所以它是这样的:
p2 1 2 3 4 5
p1 5 4 3 2 1
---------------------
7 7 7 7
所以你每次都可以做 7,而 1 是一个特例。我不知道为什么,但我直觉上以1为起点,因为感觉你需要主动才能控制对方的动作。 (一个人不能做两次 1 所以另一个人必须拿 2-5 这让你控制)
无论如何,非常感谢所有的帮助。也适用于编写的整个程序。我不能使用它,因为它不会编译为缺乏良好的 java 技能:) 我也想自己解决它。
不管怎样,我看到这是一个 wiki,祝未来尝试解决这个问题的人好运!
【问题讨论】:
-
这并没有立即让我觉得是一个编程问题。 本身,为这个游戏推导出获胜策略与 Java 没有任何关系。除非,我想,你想做某种统计模拟并尝试从随机游戏的结果中制定策略。但您实际上可以通过逻辑推断它,而不涉及计算机。
-
另外,你说过你“必须为此编程”。是什么东西?为什么它必须成为一个程序?如果是为了一项任务,你可能有一个比“编程一些东西”更具体的简报,所以也许检查它会引导你走上正确的轨道。如果是你个人选择的一个项目,恐怕你选了一个不合适的项目。
-
我必须找到解决方案,即永远获胜的最佳策略。而且我在思考和谷歌数小时后无法弄清楚,所以我现在想尝试编写一些可以在java中解决它的东西。但是,如果您有任何关于如何在没有 java 的情况下找到它或推理它的提示,我也会非常高兴!
-
@Javaaaa:当你编程时,你是在告诉计算机该做什么。这需要你知道自己该做什么!因此,在告诉计算机如何执行该策略之前,您需要自己了解该策略。尽管在 AI 领域有一些通用技术可以让您无需了解复杂游戏的所有信息,但对于这样的游戏,您自己寻找策略要快得多。请参阅我的回答以获取一些提示,如果需要,请随时评论问题或要求澄清。
-
谢谢!请在 OP 中查看我的编辑