ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1.12 NIM(2)“拈”游戏分析

2020-11-27 13:34:32  阅读:282  来源: 互联网

标签:... XOR 游戏 NIM 两堆 奇数 石头 1.12 玩家


1.12 NIM(2)“拈”游戏分析

基础问题:有N块石头和两个玩家A和B,玩家A先将石头分成若干堆,然后按照BABAB的顺序不断轮流取石头,能将剩下的石头一次取光的玩家获胜,每一次取石头,每一个玩家只能从若干堆石头中任选一堆,取这一堆石头中任意数目(大于1)个石头,请问:玩家A要怎样分配和取石头才能保证自己有把握获胜?

解法:

n 表示石头的堆数 , m表示总的石头数目
n = 1 , no
n = 2 , m > 2 ,(1,1)是安全局面 , (1,X)就不是安全局面 , (2,2)是安全局面
初步总结,如果石头的数目是偶数个,就将它平均分成两堆,这样无论对手怎么取,自己取完之后保证安全局面就可以了
那么如果石头的数目是奇数个呢?
m = 3 ,(2,1),(1,1,1) no
看整个游戏过程:
n堆石头,从\((m_1,m_2,m_3,...m_n)\)开始,直到石头全部递减为\((0,0,0...,0)\)

  • 当m是偶数的时候,将m分成相同的两份,这样就能够取胜:
    开始:\((m_1,m_2)\) , 他们的异或结果是\(XOR(m_1,m_2) = 0\)
    中途:\((m_1,m_2)\) ,无论对手怎么取,两堆石头肯定变得不相等 \(XOR(m_1,m_2) != 0\)
    我方:\((m_1,m_2)\) , 将两堆变得相等
    ......
    最后: \((0,0)\) , 我胜
  • 当m是奇数的时候:
    开始:\((m_1,m_2,...,m_n)\) , \(XOR(m_1,m_2,...m_n) = ?\)
    中途:\((m_1,m_2,...,m_n)\) , \(XOR(m_1,m_2,...,m_n) = ?\)
    ......
    最后: \((0,0)\) ,\(XOR(0,0,0,...,0) = 0\)
    事实上:当有奇数个石头的时候,无论怎么分堆\(XOR(m_1,m_2,...m_n) = ?\)的结果不能等于0
    证明:
    当m为奇数的时候(二进制表示最低位为1),异或的结果最低位肯定为1
    更有:还可以证明,当\(XOR(m_1,m_2,...m_n) !=0\)时,我们总可以只改变一个值,就可以让\(XOR(m_1,m_2,...m_n) = 0\)
    还可以证明,\(XOR(m_1,m_2,...m_n) = 0\)时,可以通过修改一个使得\(XOR(m_1,m_2,...m_n) != 0\)
    有了上述的几个证明得之:
    m为奇数的时候,必输

拓展问题:

1 如果规定相反,取光所有石头的人输,又应该如何控制局面?

n代表石头的堆数
m代表石头的总数
\(m_i\)代表第i堆的石头总的数目

  • 如果m是奇数,则和上面的证明一样,必赢
  • 如果m是偶数,将石头分为数目相同的两堆
    \(if m_1 > 1 ,m_2 > 1 , m_1 = m_2\)取到两堆相同
    \(if m_1 = 1,m_2 > 1\),把\(m_2\)取完,反之同理。
    \(if m_1 = 0\),把\(m_2\)取完,反之同理。

2 如果每一次可以挑选任意K堆,并从中任意取石头,又该如何找到必胜策略呢?

待定

标签:...,XOR,游戏,NIM,两堆,奇数,石头,1.12,玩家
来源: https://www.cnblogs.com/botak/p/14047111.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有