博弈之取石子经典游戏

合集下载

取石子游戏

取石子游戏

取石子游戏
取石子游戏是一种经典的策略游戏,通常由两名玩家轮流进行。

游戏开始时,一堆石子被放在桌子上。

每个玩家在自己的回合中可以选择取走一定数量的石子,但不能取走超过规定的最大数量。

目标是在游戏结束时,取走最后一个石子的玩家获胜。

以下是一种常见的取石子游戏规则:
1. 游戏开始时,一堆石子被放在桌子上。

2. 两名玩家轮流进行,每个玩家在自己的回合中可以选择取走1到M个石子,其中M为规定的最大数量。

3. 玩家必须至少取走1个石子,但不能超过M个石子。

4. 最后一个石子被取走的玩家获胜。

游戏的策略通常是基于数学原理和对对手的预测。

在某些特定的游戏规则下,可以使用数学公式来计算最优策略。

例如,在一堆有N个石子的游戏中,如果规定每个玩家最多可以取走M个石子,那么可以使用以下公式来计算最优策略:
1. 如果N%(M+1)等于0,那么第一个玩家将会输掉游戏。

2. 否则,第一个玩家可以选择取走N%(M+1)个石子,然后无论第二个玩家取走多少个石子,第一个玩家总是可以以同样的方式回应,直到最后一个石子被取走。

这个公式可以帮助玩家计算出在给定规则下的最优策略,从而提高胜利的机会。

需要注意的是,取石子游戏有很多种不同的规则和变体,上述的规则只是其中一种常见的形式。

具体的规则可能会有所不同,所以在参与游戏之前最好明确规定好游戏的规则。

Nim游戏(博弈论中的组合数学问题).

Nim游戏(博弈论中的组合数学问题).

Nim 游戏——博弈论中的经典问题(组合数学里的知识 Nim 取子游戏Nim 取子游戏的解依赖于奇偶性,是组合数学里的一个重要问题Nim 取子游戏就是两个人面对若干堆硬币(石子、豆粒……进行的游戏。

设有k>=1堆硬币,各堆分别含有n1, n2…… nk 枚硬币,按下列规则取,直到最后没硬币可取,那个人就判输! !规则:1、有两名选手,分别为 I 和 II2、两名选手交替进行取硬币活动,至少在一堆中取一枚硬币3、对于任何一种局面,和局面的过去与未来无关4、最后无硬币可取的人判输! !推理证明:假设两个游戏人 I 、 II 。

假设有两堆硬币 n1、 n2。

游戏人 I 先去,游戏人 I 能否获胜与 n1、 n2的值的大小无关,而取决于 n1是否等于 n2.假设 n1 不等于 n2,先游戏人 I 取较大的堆中使其与较小的堆中硬币数目相等。

然后游戏人 II 取任意一堆中的任意枚硬币,然后游戏人 I 取另外一堆中与游戏人 II 相同的数目, 直到最后,可以看出最后游戏人 I 获胜。

若 n1 == n2,则游戏人 I 先取,游戏人 II 按上面的游戏人 I 的取法去取,最终可以看出游戏人 II 获胜。

举个例子 :(8 , 5 ---- 游戏人 I ---→ (5 , 5 ----游戏人 II ---→ (5 , 2 ---- I -→ (2 , 2 --- II — >(0,2 ---- I --→ (0,0从两堆石子的取法可以推广到 k 堆石子的取法, 先来看一下, 两堆石子的具体取法是怎样进行的?先将 n1和 n2表示成二进制的数的形式 !!!例如 57 = 2^5 + 2^4 + 2^3 + 2^0 = 111001这样我们就可以将一堆硬币看成有 2的幂数的子堆组成, 于是 57就可以看成有2^5 , 2^4 , 2^3 , 2^0的各子堆组成。

在两堆 Nim 取石子游戏中, 各种大小的子堆的总数只能是 0,1,2。

取石子游戏完全揭秘

取石子游戏完全揭秘

取石子游戏完全揭秘由感性认识到理性认识一、游戏 (2)二、从简单入手 (2)三、类比与联想 (6)四、证明 (8)五、推广 (11)六、精华 (12)七、结论 (16)八、总结 (17)一、游戏游戏A:甲乙两人面对若干堆石子,其中每一堆石子的数目可以任意确定。

例如图1所示的初始局面:共n=3堆,其中第一堆的石子数a1=3,第二堆石子数a2=3,第三堆石子数a3=1。

两人轮流按下列规则取走一些石子,游戏的规则如下:每一步应取走至少一枚石子;每一步只能从某一堆中取走部分或全部石子;如果谁无法按规则取子,谁就是输家。

图 1 游戏的一个初始局面游戏B:甲乙双方事先约定一个数m,并且每次取石子的数目不能超过m 个;其余规则同游戏A。

我们关心的是,对于一个初始局面,究竟是先行者(甲)有必胜策略,还是后行者(乙)有必胜策略。

下面,我们从简单入手,先来研究研究这个游戏的一些性质。

二、从简单入手用一个n元组(a1, a2, …, a n),来描述游戏过程中的一个局面。

可以用3元组(3, 3, 1)来描述图1所示的局面。

改变这个n元组中数的顺序,仍然代表同一个局面。

(3, 3, 1)和(1, 3, 3),可以看作是同一个局面。

如果初始局面只有一堆石子,则甲有必胜策略。

甲可以一次把这一堆石子全部取完,这样乙就无石子可取了。

如果初始局面有两堆石子,而且这两堆石子的数目相等,则乙有必胜策略。

因为有两堆石子,所以甲无法一次取完;如果甲在一堆中取若干石子,乙便在另一堆中取同样数目的石子;根据对称性,在甲取了石子之后,乙总有石子可取;石子总数一直在减少,最后必定是甲无石子可取。

对于初始局面(1),甲有必胜策略,而初始局面(3, 3),乙有必胜策略。

局面的加法:(a1, a2, …, a n) + (b1, b2, …, b m) = (a1, a2, …, a n, b1, b2, …, b m)。

(3) + (3) + (1) = (3, 3) + (1) = (3, 3, 1)。

取石子游戏详细解答

取石子游戏详细解答

取石子游戏详细解答取石子游戏(取石子游戏)现有 5 堆石子,石子数依次为3,5,7,19,50,甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取), 取最后一颗石子的一方获胜。

甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?最佳答案这是数论中的最优策略问题,没有平均数原理。

我好好想想再给你答案。

要上班了,下班继续思考……(时间不多,才回复,见谅)1. 从50中取走32粒剩余18粒是正确的。

2. 算法:从其中一堆中取n个,使得剩余的所有数目正好是“必负局(此时先取必输的局面)”。

3. 所谓“必负局”是指把剩余的每一堆的数目都转化成二进制的数,然后把它们相加,规定做不进位的加法(也就是异或运算),即0+0=0,1+0=0,0+1=1,1+1=0(不进位),如果所得和是0(多个0),那么此种局势称为“必负局”。

4. “必负局”原理:一个“必负局”,一次改动任何一个数,都将不再是“必负局”,同时,任何一个“非必负局”,通过正确地减少某个数,一定能变成“必负局”,并且这种操作是唯一的。

设想现在是“必负局”,假如你先取,势必把其中的某个数的1改成了0,0改成了1,一定不再是“必负局”了,而我一定可以在把它变会“必负局”。

其实这样的局势,相当于偶数,你取了,必定有对应我取的,所以我一定拿到最后一个。

简单的想,考虑只有两堆,那么如果原来不相等,那就是“非必负局”,先取者有必胜方式,只要取多的一堆使得两堆相等,之后你取几个,我就从另一堆取几个。

5. 应用:(也许格式会改变)19 0100117 0001115 0001013 000011010010 (18)10也就是,还要18才能变成“必负局”,所以50-18=32所以第1次只能在第5堆石子中取32粒,使得取出32粒后为“必负局”,即异或运算结果为0。

对于只有两堆的只要取完后保证两堆的数目相同就能赢了0 :00000 6 :001106 :00110 第二人在第一堆中取走3个: 0 :00000 3 :00011 6 :00110 第一人也在第二堆中取走3个: 0 :00000 3 :00011 3 :00011 知道第二人会必输了吧不妨第二人取走第一堆吧,变成: 0 :00000 0 :00000 3 :00011 第一人取走最后一堆: 0 :00000 0 :00000 0 :00000 第一人胜! 如: 17 :100018 :010009 :01001 第一列的和不为偶数(1+0+0=1) 第一步: 第一人在第一堆中取走16个变成 1 :00001 8 :01000 9 :01001 第二人取,不论怎么取,都会使某一列的和不为偶数,如: 1 :00001 6 :00110 9 :01001 第一人现在在9中取走2个变成:1 :00001 6 :00110 7 :00111 第二人不妨取走第一堆变成0 :00000 6 :00110 7 :00111 别讲那么说专业术语嘛看这个行不行把每堆的数目用二进制表示每行一个写成一列(多少堆就多少行) 右对齐,左边不足的补0,保证每个二进制数有相同的位数然后取子取完后保证二进制数每一位所对应的那一列的和是偶数即可如果一开始就已满足每列的和都是偶数,那第一个取的人就必输无疑其实如果游戏人双方都知道了这个规律,那这个游戏的输赢就在于谁先走,也就没有意思了。

博弈论取石子问题

博弈论取石子问题

博弈论取石子问题
博弈论取石子问题是一类经典的博弈问题,也被称为Nim游戏。

这个问题一般描述为:有一堆石子,两名玩家轮流从中取出若干个石子,每次取石子的数量有限制(例如,每次最多只能取1个或者2个),最终取光所有石子的玩家获胜。

在这个问题中,两位玩家都采取最优策略,并且可以假设每位玩家都会尽力阻止对方获胜。

这样,对于每一轮的取石子操作,可以通过数学的方法来判断哪位玩家有必胜策略。

一般来说,博弈论取石子问题可以通过异或运算来求解。

具体思路如下:
1. 通过异或运算计算出所有石子数量的异或和。

2. 如果异或和为0,表示当前状态下无论怎么取石子,都无法保证必胜,此时当前玩家必输。

3. 如果异或和不为0,表示当前状态下存在某种取法,可以保证必胜。

具体的取法是找到最高位上的1,然后将某一堆石子数量减去该最高位1的数量,使得新的异或和为0。

通过上述思路,可以快速计算出哪位玩家具有必胜策略。

当然,如果可以通过编程的方式来模拟和计算,会更加直观和方便。

几种两人轮流取石子游戏的输赢规律及取胜策略 续篇

几种两人轮流取石子游戏的输赢规律及取胜策略 续篇

几种两人轮流取石子游戏的输赢规律及取胜策略续篇上篇中第八种情况的推论有误,不能一概而论,因而第九种也有误。

特此更正。

下面再看几种情况。

分析的基础是上篇中的第四种情况。

引用如下:有三堆石子,个数分别是1、2、3个。

分析:若先取的把只有一个的一堆取完,则变成上篇中的第二种情况,后取的赢;若先取的从两个的一堆中取一个,则后取的把三个的一堆取完,变成第一种情况,后取的赢;若先取的把两个的一堆取完,变成上篇中的第二种情况,还是后取的赢。

先取的从三个的一堆中取,不论取几个,用同样的方法进行分析,后取的都有办法赢。

所以,先取的不论如何取法,后取的都有应对之策保证必赢。

一、有三堆石子,个数分别是1、3、4个。

分析:先取的只要从4个一堆中取出2个,就变成上篇中的第四种情况,所以先取的必赢。

二、有三堆石子,个数分别是1、4、5个。

分析:若先取的把只有一个的一堆取完,则变成上篇中的第二种情况,后取的赢;若先取的从4个的一堆中取一个,则后取的从5个的一堆中取3个,变成上篇中的第四种情况,后取的赢;其他情况不论先取的从4个或5个的一堆中取几个,后取的都有应对之策取胜;所以,后取的必赢。

三、有三堆石子,个数分别是1、5、6个。

分析:先取的只要从6个一堆中取出2个,就变成第二种情况,所以先取的必赢。

四、有三堆石子,个数分别是1、6、7个。

分析:若先取的把只有一个的一堆取完,则变成上篇中的第二种情况,后取的赢;若先取的从6个的一堆中取一个,则后取的从7个的一堆中取3个,变成第二种情况,后取的赢;其他情况不论先取的从6个或7个的一堆中取几个,后取的都有应对之策取胜;所以,后取的必赢。

五、有三堆石子,个数分别是1、7、8个。

分析:先取的只要从8个一堆中取出2个,就变成第四种情况,所以先取的必赢。

根据以上五种情况可以得出:三堆石子中有一堆是1个,其他两堆的个数是相邻数的输赢规律及取胜策略是:石子个数在中间的数若是偶数,先取的必输,因为先取的不论怎么取都会使后取的有机会找到取后最终出现两堆石子个数相同的情况,所以先取的必输;石子个数在中间的数若是奇数,先取的必赢,因为先取的只要从个数最多的一堆中取出2个就变成上一种情况,所以先取的必赢。

博弈论入门-取石子游戏

博弈论入门-取石子游戏

博弈论⼊门-取⽯⼦游戏
引导游戏
1. 玩家:2⼈
2. 道具:23张扑克牌
3. 规则: - 游戏双⽅轮流取牌 - 每⼈每次仅限于取1张、2张或3张 - 扑克牌取光,则游戏结束 - 最后取牌的⼀⽅为赢家。

什么是组合游戏?
- 有两个玩家 - 游戏的操作状态是⼀个有限的集合(⽐如:限定⼤⼩的棋盘) - 游戏双⽅轮流操作 - 双⽅的每次操作必须符合游戏规定 - 当以放不能将游戏继续进⾏时,游戏结束,同时,对⽅为获胜⽅ - ⽆论如何操作,游戏总能在有限次操作后结束
概念:必胜点N和必败点P
必胜点(N):下⼀个选⼿将取胜的位置称为必胜点。

必败点(P):前⼀个选⼿将取胜的位置称为必败点。

必胜点N和必败点P属性:
- 所有终结点时必败点P - 从任何必胜点操作,⾄少有⼀种⽅法可以进⼊必败点 - ⽆论如何操作,从必败点都只能进⼊必胜点
取⼦游戏算法实现:
- 步骤⼀:将所有终结位置标记为必败点 - 步骤⼆:将所有⼀步操作能进⼊必败点的位置标记为必胜点 - 步骤三:如果从某个点开始的所有⼀步操作都只能进⼊必胜点,则将该店标记为必败点 - 步骤四:如果在步骤三未能找到新的必败点,则算法终⽌,否则返回步骤⼆。

-
栗⼦:
set:1 3 4
x:0 1 2 3 4 5 6 7 8 9 10 11 12 13
k:p n p n n n n p n p n n n n。

取石子游戏

取石子游戏

从三道例题来看一类常见博弈问题的思维方法。

长郡中学金恺在博弈问题中,有一类最为一般与常见,概括来说满足4个基本要点:1、双人轮流取子,输赢只与当前的局面有关,而与之前怎么取的无关;2、取子的方法可以是多种不同的取法相结合。

13、某个人无法按规则取了就算输——即没有后继状态的状态为败局;4、石子越取越少,或者存在某种特殊的性质,使得状态不可能出现循环——状态存在拓扑顺序,能够采用递推的方法解决(但效率不高,因为没有利用走棋规则的特点);对于这类博弈题,我们往往希望根据走棋特点找到一种简单的性质,然后根据这个性质将Array所有状态进行划分:即将所有状态分为两部分W、L,满足性质A的状态划到集合L,不满足性质A的状态划到集合W:对于集合L中的状态l,证明l的后继状态都在W中;对于集合W中的状态w,证明w至少有一个后继在L中。

则W中的所有状态都是胜局,L中的所有状态都是败局。

对于输入的一个状态,只要判断它是否满足性质A即可以知道它是胜是败。

但是性质A可能非常隐蔽、复杂,要找到性质A可能却要花费很多时间和心智。

这类问题由于取子方法有很多很多,所以没有约定俗成的公式2。

抓住取子方法的特点、周密深入的分析、找到问题的本质是解决这类问题的最直接的办法。

在很多情况下,找规律也是一个不错的选择,因为大多数情况下性质A的形式是非常简单的(这正体现了数学中简单即美的最高境界),往往可以通过观察+猜想找到正确的结果。

而一旦找到了某个性质A对于小数据都成立(可用程序检测),那么用归纳法证明是比较简单的。

本文就通过几个例子,来探索解决这类问题的思维方法。

问题1:取火柴游戏题目来源:姚金宇原创题目描述:有三堆火材,分别为a,b,c根。

有两个人在做如下游戏:游戏者任意拿走其中一堆火柴,再在剩下的两堆里任取一堆任意分成两堆(每堆至少1根)。

两人轮流如此,谁无法这样做就算输了。

输入格式:有n组数据:每一行三个数a,b,c,满足1≤a,b,c≤1,000,000,000。

取石子游戏详细解答

取石子游戏详细解答

取石子游戏详细解答取石子游戏(取石子游戏)现有 5 堆石子,石子数依次为3,5,7,19,50,甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取), 取最后一颗石子的一方获胜。

甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?最佳答案这是数论中的最优策略问题,没有平均数原理。

我好好想想再给你答案。

要上班了,下班继续思考……(时间不多,才回复,见谅)1. 从50中取走32粒剩余18粒是正确的。

2. 算法:从其中一堆中取n个,使得剩余的所有数目正好是“必负局(此时先取必输的局面)”。

3. 所谓“必负局”是指把剩余的每一堆的数目都转化成二进制的数,然后把它们相加,规定做不进位的加法(也就是异或运算),即0+0=0,1+0=0,0+1=1,1+1=0(不进位),如果所得和是0(多个0),那么此种局势称为“必负局”。

4. “必负局”原理:一个“必负局”,一次改动任何一个数,都将不再是“必负局”,同时,任何一个“非必负局”,通过正确地减少某个数,一定能变成“必负局”,并且这种操作是唯一的。

设想现在是“必负局”,假如你先取,势必把其中的某个数的1改成了0,0改成了1,一定不再是“必负局”了,而我一定可以在把它变会“必负局”。

其实这样的局势,相当于偶数,你取了,必定有对应我取的,所以我一定拿到最后一个。

简单的想,考虑只有两堆,那么如果原来不相等,那就是“非必负局”,先取者有必胜方式,只要取多的一堆使得两堆相等,之后你取几个,我就从另一堆取几个。

5. 应用:(也许格式会改变)19 0100117 0001115 0001013 000011010010 (18)10也就是,还要18才能变成“必负局”,所以50-18=32所以第1次只能在第5堆石子中取32粒,使得取出32粒后为“必负局”,即异或运算结果为0。

对于只有两堆的只要取完后保证两堆的数目相同就能赢了0 :00000 6 :001106 :00110 第二人在第一堆中取走3个: 0 :00000 3 :00011 6 :00110 第一人也在第二堆中取走3个: 0 :00000 3 :00011 3 :00011 知道第二人会必输了吧不妨第二人取走第一堆吧,变成: 0 :00000 0 :00000 3 :00011 第一人取走最后一堆: 0 :00000 0 :00000 0 :00000 第一人胜! 如: 17 :100018 :010009 :01001 第一列的和不为偶数(1+0+0=1) 第一步: 第一人在第一堆中取走16个变成 1 :00001 8 :01000 9 :01001 第二人取,不论怎么取,都会使某一列的和不为偶数,如: 1 :00001 6 :00110 9 :01001 第一人现在在9中取走2个变成:1 :00001 6 :00110 7 :00111 第二人不妨取走第一堆变成0 :00000 6 :00110 7 :00111 别讲那么说专业术语嘛看这个行不行把每堆的数目用二进制表示每行一个写成一列(多少堆就多少行) 右对齐,左边不足的补0,保证每个二进制数有相同的位数然后取子取完后保证二进制数每一位所对应的那一列的和是偶数即可如果一开始就已满足每列的和都是偶数,那第一个取的人就必输无疑其实如果游戏人双方都知道了这个规律,那这个游戏的输赢就在于谁先走,也就没有意思了。

取石子游戏的策略及其应用

取石子游戏的策略及其应用

取⽯⼦游戏的策略及其应⽤有⼀种很有意思的游戏,就是有物体若⼲堆,可以是⽯⼦或是围棋⼦等等均可。

两个⼈轮流从堆中取物体若⼲,规定最后取光物体者取胜。

取⽯⼦游戏是我国民间流传已久的⼀种博奕,在国外亦称Nim游戏。

别看这游戏极其简单,却蕴含着深刻的道理。

下⾯我们来分析⼀下要如何才能够取胜。

游戏Ⅰ有若⼲堆任意数⽬的⼩⽯⼦{a1,a2,…,a m}(m≥1),两⼈轮流取⽯⼦,每⼈每次可以从其中任意⼀堆中取,每次可以取1、2、3、……或k(1≤k≤ min{a1,a2,…,a m})颗⽯⼦,把⽯⼦取完的⼈为胜者。

采⽤符号{a1,a2,…,a m;k}来代表游戏Ⅰ中⼩⽯⼦的初始状况和限制条件,⼀个⼈取⼀次⽯⼦实际上就是把{a1,a2,…,am;k}中某个分量ai(1≤i≤m)减⼩为ai′,即{a1,a2,…,ai,…,a m;k}—→{a1,a2,…,ai′,…,a m;k}(0≤a i<a i),我们把这种取⼀次⽯⼦使数组发⽣的变换称为T变换,根据现成博奕论先驱冯·诺伊曼(VonNeumann)的“完全确定信息游戏必定存在⼀种确定的获胜策略”的经典理论,要么对先取者存在某种取法,即某个T变换,⽆论后取者如何取,先取者总有相应对策,直⾄最终取得胜利;要么⽆论先取者如何取,后取者可以找到某种T变换,保证后取者总有相应策略获胜。

为了解决游戏{a1,a2,…,am;k}的对策,我们先看⼀个简单的例⼦。

例1 桌上放着⼀堆⼩⽯⼦⼀共100颗,两⼈(甲、⼄)轮流取,每次可以取1⾄10颗,取完的⼈为胜者,怎样才能取胜?分析这个问题实际上是取⽯⼦游戏的特殊情形{100;10},我们利⽤倒推法:容易看出11是取胜的关键数学,因为到此时,不论对⽅(甲)取多少颗(⼤于0且⼩于11),总留下⼤于0且⼩于11颗⽯⼦,这样⼄⽅⼀次取完即获得胜利。

同样地分析,要取到11必须取到22,33,44,55,66,77,88,99,这样我们就知道了获胜之道:①先取1颗⽯⼦,留下99颗,然后对⽅取a(1≤a≤10)颗,⼰⽅取(11—a)颗,就总能掌握这种致胜的关键数,从⽽确保获胜。

若干取石子问题

若干取石子问题

若⼲取⽯⼦问题⼏道取⽯⼦游戏【前⾔】取⽯⼦游戏是⼀类经典的博弈问题,也是博弈问题SG函数的基础所在。

⽽它也具有⼀般博弈题的思维难度较⼤、编程量⼩等特点,因此在⽐赛时的得分情况往往呈现出两边倒的情况。

⽽其游戏的结论却经常是浅显易懂但⼜难以捉摸的,往往在⽐赛结束后,经过别⼈的⼏句话就使⼈恍然⼤悟。

本⽂将对⼏道取⽯⼦的游戏进⾏讨论,并分析思维的过程,希望读者能从中获益。

⾸先我们先来回顾⼀下最原始的取⽯⼦游戏。

即:有N堆⽯⼦,每次可以从任意⼀堆中取出若⼲⽯⼦,不能不取,两⼈轮流⾏动,最先⽆⽯⼦可取的⼈输。

⽽解决此题的⽅法便是把这N堆⽯⼦的个数进⾏异或操作,得到的值为0即为先⼿必败,否则先⼿必胜。

关于这⼀问题可以参考相关⽂献。

但仅仅靠这个模型并不能满⾜我们的要求,⾯对⼀些进⾏过变形的题⽬需要我们灵活运⽤。

下⾯我们先来看⼀个例题。

【例题1】POIXVI Stage I Pebbles题⽬⼤意:有N堆⽯⼦,开始时⽯⼦个数为A1,A2…A N。

(从左到右编号)并满⾜A1≤A2≤…≤A N,即⽯⼦个数为⾮递减数列。

两⼈轮流取⽯⼦,每次可以在任意⼀堆中取任意多个,不能不取,并且必须保证每次取完后的⽯⼦个数仍为⾮递减。

最先不能取的输。

问题分析:很显然,这道题在普通的取⽯⼦游戏上加了⼀个限制,即必须保持⽯⼦数为⾮递减数列。

这样我们便不能直接⽤原来的性质,⽽状态数也⾮常⼤,只能考虑通过⼀步步分析把问题转化。

⾸先,我们先来研究⼀些简单的情况:显然N=1时先⼿必胜。

⽽N=2时,可以发现当A1= A2时,先⼿必败,因为此时先⼿不能取A2的⽯⼦,只能在A1中取x个⽯⼦。

⽽后⼿者只需跟随先⼿者,同样在A2中取出x个即可满⾜保持A1’= A2’。

当A1< A2时,则先⼿可以从A2中取⾛A2- A1个⽯⼦。

因此先⼿必胜。

经过这个简单的分析,我们可以感觉到,由于要保证⾮递减的性质,在相邻的两堆中,可能经常会有类似N=2时的博弈发⽣。

取石子游戏

取石子游戏

取石子游戏简介取石子游戏是一种古老且经典的游戏,通常在孩子们之间进行。

这个游戏的目标是通过每一步的策略来获得尽可能多的石子。

在这个游戏中,两个玩家轮流从一堆石子中取出石子,每次取的数量可以是任意正整数,但不能超过规定的最大值。

最后,拿到最多石子的一方将获胜。

游戏规则1.游戏开始时,准备一堆石子。

这种游戏一般使用小石子或棋子来代表石子。

2.两个玩家轮流进行操作,根据规定的规则取石子。

3.每一步,玩家可以从堆中取出任意数量的石子,但不能超过规定的最大值。

4.游戏继续直到没有石子可供取出。

5.最后,拿到最多石子的一方将获胜。

游戏策略在取石子游戏中,玩家之间进行的是一种全信息博弈。

这意味着玩家可以完全了解整个游戏状态,包括对手的策略和目标。

因此,玩家可以通过一定的策略来优化自己的收益。

基本策略保证胜利的策略如果游戏的规则允许,玩家可以通过以下策略保证胜利:1.规定每次取石子的数量为1个,那么先手的玩家总是可以取到最后一个石子,从而获胜。

2.如果规定每次取石子的数量有上限,而且堆中的石子数量是该上限的倍数加1,那么先手的玩家总是可以通过合理的策略来使得每一步的石子数量维持在上限倍数上,从而保证最后一个石子留给对方。

最优策略对于一般的取石子游戏,玩家可以通过数学方法找到最优策略。

最佳策略取决于堆中石子的数量和规定的最大取石子数量。

例如,假设堆中有13个石子,规定一次最多取5个石子。

通过计算,可以得出以下最佳策略:•如果堆中石子数量是5的倍数加1,先手的玩家会输。

•如果堆中石子数量是5的倍数,先手的玩家会赢。

通过数学分析,可以得出结论:对于先手玩家,在石子数量是(m×n+1)的情况下,先手玩家会输;在石子数量是m×n的情况下,先手玩家会赢。

其中m和n是任意正整数,n是规定的规则中每一次最大取石子的数量。

取石子游戏的变种取石子游戏有许多变种,可以根据玩家的喜好和游戏的目标来选择。

Nim游戏在Nim游戏中,有几堆石子,两个玩家轮流进行操作,每次可以从一堆石子中取出任意数量的石子。

几种两人轮流取石子游戏的输赢规律及取胜策略

几种两人轮流取石子游戏的输赢规律及取胜策略

几种两人轮流取石子游戏的输赢规律及取胜策略有两堆或三堆石子,每堆石子数量不限,至少有一个。

两人轮流取石子,取法如下:1、每人每次至少取一个,不能不取;2、每人每次也可以取多个,甚至一次取完一堆的所有石子,但不能一次从两堆或三堆中取石子,只能从一堆中取石子。

输赢规定:轮到谁无石子可取谁就输,或者说谁取到最后的一个或者最后一堆的剩下石子谁就赢。

这个游戏有没有输赢规律?到底是先取的赢还是后取的赢?如有输赢规律,如何保证该赢的人一定能赢?即取胜的策略是什么?要解决这些问题,我们可以先易后难,先简后繁,进行探索和分析,找出输赢规律及取胜策略。

一、有两堆石子,两堆石子的个数相同。

分析:若两堆石子各有一个,则按照游戏规则,后取的必赢。

因为只有一种情况,即先取的和后取的各取一个就结束。

再细想,如果两堆石子个数超过一个,还是后取的赢。

取胜策略是每次先取的从某一堆取几个,后取的就从另一堆取几个。

这样每一轮取完后,剩下的两堆石子还是同样多。

最后一轮的情况是先取的把某一堆剩下的取完(一个或几个),后取的把另一堆剩下的取完(一个或几个)。

二、有两堆石子,两堆石子的个数不同。

分析:先取的可从个数多的一堆取几个石子,取后使两堆石子的个数相同。

这样就变成第一种情况,则先取的必赢。

策略是先从个数多的一堆取几个石子,取后使两堆石子的个数相同,然后再按照第一种情况的策略来取即可。

三、有三堆石子,其中有两堆个数一样多。

分析:先取的可先把个数不一样多的一堆取完,就变成第一种情况,所以是先取的必赢。

四、有三堆石子,个数分别是1、2、3个。

分析:若先取的把只有一个的一堆取完,则变成第二种情况,后取的赢;若先取的从两个的一堆中取一个,则后取的把三个的一堆取完,变成第一种情况,后取的赢;若先取的把两个的一堆取完,变成第二种情况,还是后取的赢。

先取的从三个的一堆中取,不论取几个,用同样的方法进行分析,后取的都有办法赢。

所以,先取的不论如何取法,后取的都有应对之策保证必赢。

组合博弈 取石子游戏.

组合博弈 取石子游戏.

博弈问题分析——取石子游戏实例解答<1>小红是个游戏迷,他和小蓝一起玩拿石子游戏。

游戏规则为2个人轮流拿石子。

一次可以拿1颗或3颗,规定谁取到最后一颗石子谁就胜出。

最后决定由小红先取。

两人都是游戏高手,该赢的绝不会输(表示不会失误)。

问在知道石子总数的情况下,怎样快速预测谁将会胜出。

分析:小红和小蓝各取一次共有三种情况:②共取走2颗石子(1,1)② 共取走4颗石子(1,3)③ 共取走6颗石子(3,3)设方案①取了N1次,方案②取了N2次,方案③取了N3次后,还剩下K(k<6,否则可以再取几轮,导致剩余量<6)个石子。

最后K的取值有三种情况:0,1,3。

这个要解释一下:剩下的石子个数总共有0,1,2,3,4,5几种可能,2可以再取一轮(1,1)剩下0,4可以再取一轮(1,3)或者两次(1,1)剩下0,5可以再取(1,1)、(1,3)等的组合剩下1或3个,所以综合是最终会剩下0、1、3三种可能。

设有石子S.则S=2*N1+4*N2+6*N3+K.其中2*N1+4*N2+6*N3=(1+1)*N1+(1+3)*N2+(3+3)*N3,说明取的过程为偶数次,所以剩下K时该最先取石子的人取。

K=1,3则先取方胜。

反之,另一方胜。

又2*N1+4*N2+6*N3=2*(N1+2*N2+3*N3)为偶数,所以S的奇偶性取决于K,当K为偶数时,后取方胜,反之,先取方胜。

总结:计算时可以先对6取余,如果余数为0、2、4,则K为0(偶数,后取者胜),如果余数为1、3、5则K为1或3(奇数,先取者剩)。

<2>有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。

两个人轮流从堆中取物体若干,规定最后取光物体者取胜。

这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。

下面我们来分析一下要如何才能够取胜。

(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。

POJ取石子游戏(威佐夫博弈)

POJ取石子游戏(威佐夫博弈)

POJ取⽯⼦游戏(威佐夫博弈)取⽯⼦游戏Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other)Total Submission(s) : 1 Accepted Submission(s) : 1Problem Description有两堆⽯⼦,数量任意,可以不同。

游戏开始由两个⼈轮流取⽯⼦。

游戏规定,每次有两种不同的取法,⼀是可以在任意的⼀堆中取⾛任意多的⽯⼦;⼆是可以在两堆中同时取⾛相同数量的⽯⼦。

最后把⽯⼦全部取完者为胜者。

现在给出初始的两堆⽯⼦的数⽬,如果轮到你先取,假设双⽅都采取最好的策略,问最后你是胜者还是败者。

Input输⼊包含若⼲⾏,表⽰若⼲种⽯⼦的初始情况,其中每⼀⾏包含两个⾮负整数a和b,表⽰两堆⽯⼦的数⽬,a和b都不⼤于1,000,000,000。

Output输出对应也有若⼲⾏,每⾏包含⼀个数字1或0,如果最后你是胜者,则为1,反之,则为0。

Sample Input2 18 44 7Sample Output1SourcePKU所谓威佐夫博弈,是ACM题中常见的组合游戏中的⼀种,⼤致上是这样的:有两堆⽯⼦,不妨先认为⼀堆有 10,另⼀堆有 15 个,双⽅轮流取⾛⼀些⽯⼦,合法的取法有如下两种:1、在⼀堆⽯⼦中取⾛任意多颗;2、在两堆⽯⼦中取⾛相同多的任意颗;约定取⾛最后⼀颗⽯⼦的⼈为赢家,求必胜策略。

两堆⽯头地位是⼀样的,我们⽤余下的⽯⼦数(a,b)来表⽰状态,并画在平⾯直⾓坐标系上。

和前⾯类似,(0,0)肯定是 P 态,⼜叫必败态。

(0,k),(k,0),(k,k)系列的节点肯定不是 P 态,⽽是必胜态,你⾯对这样的局⾯⼀定会胜,只要按照规则取⼀次就可以了。

再看 y = x 上⽅未被划去的格点,(1,2)是 P 态。

k > 2 时,(1,k)不是 P 态,⽐如你要是⾯对(1,3)的局⾯,你是有可能赢的。

巴什博奕规则范文

巴什博奕规则范文

巴什博奕规则范文规则一:游戏的初始状态是一堆物品(通常用棋子或石头代表),这堆物品的数量可以是任意的,但不为零。

规则二:两名玩家轮流从这堆物品中拿走石子。

每次只能取1个、2个或3个石子。

规则三:玩家可以一次性取走全部石子。

但无法不取任何石子。

规则四:最后一颗石子被拿走的玩家即为输家。

以上就是巴什博弈的基本规则。

现在我们进一步深入了解一些关于巴什博弈的策略。

1.在巴什博弈中,理想的情况是由先手玩家决定。

如果初始状态的石子数量是4的倍数,那么先手玩家有一个必胜策略,即每次取走4-对手取走的石子数量。

这样无论对手怎么走,先手玩家总是可以使石子的数量维持在4的倍数,最终让对手取走最后一颗石子,从而获得胜利。

2.另一方面,如果初始状态的石子数量不是4的倍数,那么先手玩家没有必胜策略。

无论先手玩家怎么走,对手总是能够采取相同的策略使石子的数量保持4的倍数。

最终,对手取走最后一颗石子,先手玩家将输掉游戏。

3.当然,尽管先手玩家没有必胜的策略,但他仍可以利用一些策略尽量延长游戏的持续时间。

例如,假设初始石子数量是9,先手玩家可以选择取走2个石子。

这样一来,无论对手怎么走,先手玩家每次取走的石子数量都是对手所取石子数量的补数。

这样,游戏将持续下去,直到最后只剩下4个石子。

对手不得不取走最后4个石子,而先手玩家获得胜利。

4.上述策略可以简化为:无论初始石子数量是多少,先手玩家总是选择使得每次取走的石子数量加上对手所取石子数量等于4、这样,先手玩家可以确保自己始终处于有利位置。

巴什博弈是一个简单却有趣的博弈游戏,同时也是学习博弈论中一些基本概念和策略的良好起点。

通过深入理解博弈论和巴什博弈的规则和策略,我们可以在其他更复杂的博弈中更好地应用博弈论的原则。

东方博弈1213题解

东方博弈1213题解

东方博弈1213题解东方博弈是一种常见的思维训练游戏,也是数学中的一个经典问题。

今天我们来分析一道东方博弈的题目,题目编号为1213。

题目描述:有一堆石子,共有N个,两个人轮流从中取石子,每次可以取走1个、2个或3个石子,最后无法取石子的人视为失败者。

其中N是一个正整数。

要求:给定N,判断第一个取石子的人是否能够取胜。

解题思路:对于这道题目,我们可以使用递归的方法来解答。

首先,我们需要判断N的取值范围,因为如果N小于等于3时,无论第一个取石子的人如何取,最后都会取不到石子,所以第一个取石子的人必定失败。

因此,我们只需要考虑N 大于3时的情况。

接下来,我们可以观察到一个规律:当N为4的倍数时,无论第一个取石子的人如何取,最后都会剩下4个石子,轮到第二个人取时,无论取走几个,都会留下4个给第一个人,使得第一个人无法再取石子,最后第一个人失败。

当N不是4的倍数时,第一个取石子的人可以通过巧妙的策略来保证最后剩下4个石子给第二个人。

具体策略如下:1.第一个人取1个石子。

2.第二个人根据第一个人的取法,取相同的石子数量,使得石子的总数保持为偶数。

3.接下来,不论对手如何取石子,第一个人都可以保证剩下的石子总数为4的倍数。

因为第一个人取的数量与对手取的数量之和为3,所以第一个人取3个石子后,剩下的石子数量必定为4的倍数。

4.最后,当剩下4个石子时,无论对手如何取,第一个人都可以保证取到最后一个石子,从而获得胜利。

综上所述,对于这道题目,我们可以得出以下结论: - 当N是4的倍数时,第一个取石子的人必定失败。

- 当N不是4的倍数时,第一个取石子的人必定获得胜利。

总结:东方博弈1213题是一道经典的思维训练题,通过观察和分析石子的数量,我们可以找到一种巧妙的策略来保证第一个取石子的人获得胜利。

这道题目可以锻炼我们的逻辑思维能力和数学分析能力。

希望本文对你理解和解答东方博弈1213题有所帮助。

如果你对东方博弈和其他数学题目感兴趣,欢迎继续探索和学习。

博弈游戏汇总

博弈游戏汇总

博弈游戏汇总1、巴什博弈⼀堆⽯⼦,有n个,两个⼈轮流取,每次⾄少取1个,⾄多取m个,拿⾛最后⼀个⽯⼦的⼈获胜假设⼀堆⽯⼦有 n=m+1 由于⼀次只能取m个,⽆论先⼿取多少个,后⼿总能拿⾛剩余的,这时⼀定是先⼿负于是找到取胜规则:⼀对⽯⼦ n=(m+1)*r+s对于先⼿应该先取⾛s个,设后⼿取⾛k个,先⼿再取⾛ m+1-k 剩余的⽯⼦个数为 (m+1)(r-1) 以后保持这样的取法,先取者获胜总之,就是要留给对⼿ m+1的倍数可以归结为: s=0时,后⼿胜s<>0时,先⼿胜2、简单的⽯⼦游戏有n堆⽯⼦,每次⾄少取⼀根,⾄多拿⾛整堆,两⼈轮流拿,每次限拿其中⼀堆,取⾛最后⼀根的获胜。

1902年获胜策略已由美国数学家C.L.Bouton分析完成,⽤到的是⼆进制和平衡状态概念。

其结论是:对于n堆⽯⼦,第i (1<=i<=n)堆⽯⼦的个数是Xi,该状态为必败状态当且仅当 X1 XOR X2 XOR……Xn=0。

看个例⼦:有4堆⽯⼦,数量分别为:7 9 12 15⼆进制形式为0111100111001111异或结果为:11011101^1001=0100=4 可以从第⼆堆拿⾛5个1101^1100=0001=1 也可以从第三堆拿⾛11个1101^1111=0010=2 或者从第四堆取⾛13个给定N堆⽯⼦,两⼈轮流取⽯⼦,必须先取完⼀堆⽯⼦才能取另⼀堆,⽽且另⼀堆⽯⼦的个数必须⽐之前取的那⼀堆⼩,每次只能取1个或者质数个⽯⼦。

如果没有⽯⼦可以取了,那么他就输了。

问先⼿是否有必胜策略。

其实对于这个游戏,我们只需要判断第⼀堆⽯⼦即可,也就是⽯⼦数⽬最少的那⼀堆代码:#include<iostream>#include<algorithm>#include<math.h>using namespace std;int isprime(int n){int s=(int)sqrt(n);if(n==1) return1;for(int i=2;i<=s;i++){if(n%i==0)return0;break;}return1;}int main(){int n,a[100000],x,i,j,t;while(cin>>n){for( i=0;i<n;i++)cin>>a[i]; //每堆⽯⼦的数⽬sort(a,a+n);for(j=1;j<=a[0];j++){if(isprime(j)&&j<=a[0])a[0]=a[0]-j;x=0;for(t=0;t<n;t++)cout<<"yes"<<endl;break;}elsea[0]=a[0]+j; //恢复⽯⼦数⽬}if(x!=0)cout<<"no"<<endl;}return0;}View Code3、Nim游戏有n堆⽯⼦,每堆⽯⼦的数量为 x1, x2, x3,x4......xn。

取子游戏博弈简单分析

取子游戏博弈简单分析

一局游戏在两个游戏人之间如下交替进行:游戏从一空堆开始。

当轮到一个游戏人时,他可以往堆中加进1,2,3或4枚硬币。

往堆中加进第100枚硬币的游戏人为得胜者。

确定在这局游戏中是游戏人A还是游戏人B能够确保取胜。

取胜的策略是什么?在学术论坛有博士家园,组合图论论坛确保取足5个硬币即可例题:两个人玩移火柴的游戏,桌子上有1000根火柴,每个人每次可以拿走1-7根火柴,拿走桌子上最后那根火柴的算输,问第一个人第一次要拿多少根火柴才能保证赢7根。

以后对方拿几根,你都要拿够凑足8根的数。

1000根和8根性质是一样的。

从抢30到NIM游戏的取胜策略(一)倒推法抢30是我国民间的一个两人游戏,具有很强的对抗性和娱乐性。

抢30游戏通常有两种玩法。

(1)两人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到30,谁就为胜方。

(2)两人从1开始轮流报数,每人每次可报一个数或两个连续的数,同时把两个人报出的所有数累加,谁先使这个累加数最先达到30,谁就为胜方。

解决最个问题的一般策略是用倒推法。

以(1)为例,要抢到30,必须抢到27;要抢到27,必须抢到24。

如此倒推回去,可得到一系列关键数30、27、24、21、18、……9、6、3。

根据以上分析,抢30游戏本身并不是一个公平的游戏,初始数和先后顺序已经决定了最后的结果,因为只有后报数者才能抢到3的倍数,后报数者有必胜策略。

(二)关键因子所有这些关键数都是3的倍数。

3是两个报数者年内能够报出的最大数与最小数的和。

在类似游戏中,我们把游戏者所能用到的最大数和最小数之和称之为关键因子k,关键数就是k的倍数.。

在抢30的游戏中,关键因子k等于3。

又例如,抢100报数游戏中,如果每人可报数为1至9个连续的自然数,谁先报到100谁就是胜利者。

这里的关键因子k就是可报最大数9和可报最小数1的和,即k=10。

报数获胜的策略就是:(1)让对方先报数;(2)每次报数为关键因子减去对方所报数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

由poj 1067引发的——取石子游戏【转自各类博弈】
(2011-07-25 23:46:54)[编辑][删除]
分类:编程道路~
标签:
杂谈
上次做poj 1067的取石子游戏,只用到了whthoff博弈,未涉及到取石子的异或方法,今天重新搜索,整理了一遍。

搜罗各种资料,加上自己整理,终于成篇啦!……噼里啪啦
取石子问题
有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。

两个人轮流从堆中取物体若干,规定最后取光物体者取胜。

这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。

下面我们来分析一下要如何才能够取胜。

(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。

最后取光者得胜。

显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。

因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。

总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

即,若n=k*(m+1),则后取着胜,反之,存在先取者获胜的取法。

n%(m+1)==0. 先取者必败。

这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。

从一堆100个石子中取石子,最后取完的胜。

(二)威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两
堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

这种情况下是颇为复杂的。

我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。

前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。

可以看出,a0=b0=0,ak是未在前面出现过的最小自然数,而 bk= ak + k,奇异局势有
如下三条性质:
1。

任何自然数都包含在一个且仅有一个奇异局势中。

由于ak是未在前面出现过的最小自然数,所以有ak > ak-1 ,而 bk= ak + k > ak-1 + k-1 = bk-1 > ak-1 。

所以性质1。

成立。

2。

任意操作都可将奇异局势变为非奇异局势。

事实上,若只改变奇异局势(ak,bk)的某一个分量,那么另一个分量不可能在其他奇异局势中,所以必然是非奇异局势。

如果使(ak,bk)的两个分量同时减少,则由于其差不变,且不可能是其他奇异局势的差,因此也是非奇异局势。

3。

采用适当的方法,可以将非奇异局势变为奇异局势。

假设面对的局势是(a,b),若 b = a,则同时从两堆中取走 a 个物体,就变为了奇异局势(0,0);如果a = ak ,b > bk,那么,取走b - bk个物体,即变为奇异局势;如果 a = ak ,b < bk ,则同时从两堆中拿走 ak - ab - ak个物体,变为奇异局势( ab - ak , ab - ak+ b - ak);如果a > ak ,b= ak + k,则从第一堆中拿走多余的数量a - ak 即可;如果a < ak ,b= ak + k,分两种情况,第一种,a=aj (j < k),从第二堆里面拿走 b - bj 即可;第二种,a=bj (j < k),从第二堆里面拿走 b - aj 即可。

从如上性质可知,两个人如果都采用正确操作,那么面对非奇异局势,先拿者必胜;反之,则后拿者取胜。

那么任给一个局势(a,b),怎样判断它是不是奇异局势呢?我们有如下公式:
ak =[k(1+√5)/2],bk= ak + k (k=0,1,2,...,n 方括号表示取整函数)
奇妙的是其中出现了黄金分割数(1+√5)/2 = 1。

618...,因此,由ak,bk组成的矩形近似为黄金矩形,由于2/(1+√5)=(√5-1)/2,可以先求出j=[a(√5-1)/2],若a=[j(1+√5)/2],那么a = aj,bj = aj + j,若不等于,那么a = aj+1,bj+1 = aj+1+ j + 1,若都不是,那么就不是奇异局势。

然后再按照上述法则进行,一定会遇到奇异局势。

(三)尼姆博奕(Nimm Game):有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。

第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。

仔细分析一下,(1,2,3)也是奇异局势,无论对手如何拿,接下来都可以变为(0,n,n)的情形。

计算机算法里面有一种叫做按位模2加,也叫做异或的运算,我们用符号(+)表示这种运算。

这种运算和一般加法不同的一点是1+1=0。

先看(1,2,3)的按位模2加的结果:
1 =二进制01
2 =二进制10
3 =二进制11 (+)
———————
0 =二进制00 (注意不进位)
对于奇异局势(0,n,n)也一样,结果也是0。

任何奇异局势(a,b,c)都有a(+)b(+)c =0。

如果我们面对的是一个非奇异局势(a,b,c),要如何变为奇异局势呢?假设 a < b< c,我们只要将 c 变为 a(+)b,即可,因为有如下的运算结果: a(+)b(+)(a(+)b)=(a(+)a)(+)(b(+)b)=0(+)0=0。

要将c 变为a(+)b,只要从 c中减去 c-(a(+)b)即可。

获胜情况对先取者进行讨论:
异或结果为0,先取者必败,无获胜方法。

后取者获胜;
结果不为0,先取者有获胜的取法。

拓展:任给N堆石子,两人轮流从任一堆中任取(每次只能取自一堆),取最后一颗石子的人获胜,问先取的人如何获胜?
根据上面所述,N个数异或即可。

如果开始的时候T=0,那么先取者必败,如果开始的时候T>0,那么只要每次取出石子使得T=0,即先取者有获胜的方法。

【综合一、三给出】
任给N堆石子,两人轮流从任一堆中任取(每次只能取自一堆),规定每方每次最多取K颗,取最后一颗石子的一方获胜.问先取的人如何获胜?
与上面的问题比,这个更复杂一些,我们可以这样做
令Bi=Ai mod(K+1)
定义T‘=B1 xor B2 xor ... xor Bn
如果T‘=0 那么没有获胜可能,先取者必败
如果T’>0 那么必然存在取的方法,使得T‘=0,先取者有获胜的方法
假设对方取了在Ai中取了r<=K个
如果Ai中剩下的石子多于K 那么就在Ai中取走K+1-r个则Bi不变T‘还是0
如果Ai<=K 那么我们需要重新计算Bi和T‘ 按照上面的方法来做就可以了
下面对wythoff博弈真的讲的超详细~。

相关文档
最新文档