`
hulianwang2014
  • 浏览: 692056 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

编程之美 NIM游戏与NIM扩展游戏的讨论及解

 
阅读更多

编程之美上面有个NIM的游戏,规则如下:

有n堆石头,两个人轮流从中取,一次只能在一堆中取,至少取一个,最多把这一堆取完,取得最后一个石头的人胜利,问谁有必胜策略。

解:

设这n堆石头的个数分别是X1,X2……Xn,设F(X)= X1 ^X2 ^ X3……^Xn。如果F(X)= 0则后取的获胜,否则,先取的获胜。

证明:

如果这剩下的石头的个数的的异或值为0,则无论从一堆中取多少个,取完之后剩下的异或值一定不是0,反之,如果异或值不为0,那么一定可以从一堆中取一些,从而使取完之后的异或值为0.

但是,有一个似乎更难的题目,就是有n堆石头,两个人轮流从中取,一次只能在一堆中取,至少取一个,最多把这一堆取完,取得最后一个石头的人输,问谁有必胜策略。

这个题目的结果与上面完全相同。

证明如下:

显然,如果某一个人取之前面临的状态是k,1,1,1,1…1,也就是除了一堆不是1,其它的都是1,则这个人一定会胜利,因为这个人可以保证取完之后每一堆剩下的数目都是1,并且还有奇数个,然后这个人一定胜利。

在游戏开始的时候,如果F(x)=0,则说明第一个人取完之后,F(x)!=0,所以,说明第一个人取完之后游戏的状态不可能全部是1,这样,在第二个人思考的时候,如果此时他面临的状态是k,1,1,…1,则它一定胜利,否则他就从一堆中取,从而使取完之后F(x)=0,这样一直下去,也就是说,最后出现的k,1,1,1…1 一定是第二个人首先看到,这样他一定胜利。

反之,如果F(x)!= 0,则如果第一个人面临的状态是k,1,1,1…1,则他一定胜利,否则,他可以保证自己取之后使F(x)=0,显然,F(x)=0的时候一定不可能是k,1,1,1…1的状态,也就是说,状态k,1,1,1..1这种状态永远不是第二个人会碰到的,于是,总会到一定时候,第一个人在自己取的时候面临着k,1,1,1..1的状态。当然,如果第一个人取的时候不是k,1,1,1..1的状态,他就应该使自己取完之后F(x)=0。

证明完毕


版权所有,各位如果转载请标明出处。谢谢


分享到:
评论

相关推荐

    计算机系统1 实验四、五 Nim游戏 汇编源码

    计算机系统1 实验四、五 Nim游戏 汇编源码 计算机系统1 实验四、五 Nim游戏 汇编源码 计算机系统1 实验四、五 Nim游戏 汇编源码 计算机系统1 实验四、五 Nim游戏 汇编源码 计算机系统1 实验四、五 Nim游戏 汇编源码 ...

    Qt 实现NIM游戏

    Nim取子游戏是由两个人面对若干堆硬币(或石子)进行的游戏。设有k>=1堆硬币,各堆分别含有N1,N2,……NK枚硬币。游戏的目的就是选择最后剩下的硬币。游戏法则如下: 1.两个游戏人交替进行游戏(游戏人I和游戏人...

    java 完成Nim石子游戏.docx

    用于初学java的学生使用 使用if for 完成 NIM石子游戏

    matlab开发-NIMgame

    matlab开发-NIMgame。NIM游戏的图形用户界面实现

    组合数学取子游戏nim

    Nim is a 2-player game featuring several piles of stones. Players alternate turns, and on his/her turn, a player’s move consists of removing one or more stones from any single pile. Play ends when ...

    两个人一起玩 Nim 游戏,python3代码亲测好用

    你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在...

    Nim.rar_The Game of Nim_acm nim game_nim_nim 游戏_nim.cpp

    Nim游戏(The game of Nim)是一个很著名而且有很多版本的游戏.下面这个版本有一个有趣的获胜策略.两名参与者交替从一堆石子中取出若干数目,其个数由参与者自已决定.但是要求参与者每次至少取出一个,至多取出一半,然后...

    NIM(2)“拈”游戏分析.pdf

    据说,该游戏起源于中国,英文名字叫做“NIM”,是由广东话“拈”(取物之意) 音译而来,经由当年到美洲打工的华人流传出去,这个游戏一个常见的变种是将十二枚 硬币分三列排成 [3,4,5] 再开始玩 。我们这里讨论...

    Nim游戏(1)(1)1

    例如,如果玩家2移除了最后一个石子,你的程序应该输出一下内容:Player 1 Wins.样例输入/输出注意:你的程序中输入输出的格式必须完全和样例中的格式相一

    Nim游戏java包.rar

    Nim游戏java包 游戏中想有必胜绝招吗?我来教你。

    组合数学,取子游戏,nim简单

    组合数学编程题取子游戏(简单)Two players alternate in removing either one or two from the pile. The player who remove the last stick is the loser. The opponent remove sticks at the first, then it's ...

    vscode-nim:VS Code的扩展,提供对Nim语言的支持

    此扩展在VS Code中增加了对Nim语言的语言支持,包括: 语法突出显示(nim,nimble,nim.cfg) 代码补全 签名帮助 转到定义 查找参考 档案大纲 保存时构建 工作区符号搜索 快速资讯 Nim检查结果在Nim输出通道中...

    nimble, Nim编程语言的软件包管理器.zip

    nimble, Nim编程语言的软件包管理器 敏捷是一个面向服务的测试工具,-grade包管理器,用于 Nim编程语言 。对学习如何创建包有兴趣。 直接跳到这里的 。电子邮件内容要求安装工具灵活的使用速度灵活的刷新功能灵活...

    NIM(2)“拈”游戏分析

    提高您对“拈”游戏的理解,看完之后您一定会有很大收获的

    NIM 快速安装手册

    NIM 快速安装手册 NIM 快速安装手册 NIM 快速安装手册

    学习Nim语言(nim语言教程)

    学习Nim语言(nim语言教程),中文

    nim安装过程及配置

    AIX环境下, Nim servicer 安装配置.

    nim-duilib 图形页面环境搭建

    nim_duilib 图形页面环境搭建

    Reinforcement_NIM_Game:NIM游戏中的增强学习

    Reinforcement_NIM_Game:NIM游戏中的增强学习

    acm算法-nim游戏篇(算法设计)

    acm算法-nim游戏篇(算法设计) A number of Nim-like games in which moves are restricted somehow to occur from a single pile are analysed. In each case the complete description of type P and type N ...

Global site tag (gtag.js) - Google Analytics