编程之美 - 抓石头游戏(2)
来源:互联网 发布:知乎客厅地板还是地砖 编辑:程序博客网 时间:2024/06/06 03:11
游戏规则:
N块石头,两个玩家 A,B,A负责将石头分成M堆,然后按BABA顺序来抓取,
每人每次可以从任意堆抓取大于1的任意块石头,取得最后一块石头的人赢。
书中的分析:
如果每堆石头只有一块,当M是奇数的时候,一定是先抓的赢。
如果有两块石头,分成两堆 1:1,那先抓的一定输。
扩展一下,如果有偶数块石头,平均分成两堆 X:X,那先抓的一定会输。
联想到XOR 运算
0 xor 0 = 0
0 xor 1 = 1
1 xor 1 = 0
X xor X = 0
当 0 xor 0 结果为 0 时,游戏已经结束了。
把两堆扩展到M堆,道理也是同样。
M1, M2, M3, ... Mn
如果N是奇数,
第一步, M1 xor M2 xor M3 ...... xor Mn != 0: 因为奇数可以分解为奇数个奇数或奇数和偶数,在运行xor时最后一位一定会是1,它不会为 0
第二步, M1` xor M2` xor M3` ...... xor Mn` = 0: 经过第一次抓取后,第二个人总是可以把第一次抓取的结果转换为 xor = 0
相当于转换为偶数的状态,
第三步, M1 xor M2 xor M3 ...... xor Mn != 0: 第三步的值又会被转换为不等于0
一,二,三步循环相当于抓取次序的循环,那先抓的一定会赢。
示例程序:
示例程序为一个人和电脑轮流抓取的一个游戏,人的输入为两个整数用空格分隔,第一个整数表示堆号,第二个整数表示抓取的块数。
测试数据可以自己构造任意堆的石头。电脑会保证自己赢。
示例工程及代码
0 0
- 编程之美 - 抓石头游戏(2)
- 编程之美 - 抓石头游戏(3)
- 编程之美1.11之 石头游戏
- 编程之美-MIN(1)一排石头的游戏
- 编程之美-两堆石头的游戏
- 编程之美:NIM(1)一排石头的游戏
- 编程之美:第一章 1.11一排石头的游戏
- 编程之美 一排石头的游戏(拓展问题)
- 编程之美 - 一排石头游戏及扩展问题
- 编程之美1.11NIM(1)一排石头游戏
- 编程之美----“拈”游戏系列一:一排石头的游戏
- 读书笔记之编程之美 - 1.11 NIM(1)-排石头的游戏
- 读书笔记之编程之美 - 1.13 NIM(3) 两堆石头的游戏
- 编程之美读书笔记之1.11~1.13 一排石头的游戏
- 编程之美读书笔记_1.13 NIM(3)两堆石头的游戏
- 编程之美-MIN(1)一排石头的游戏 扩展问题
- 编程之美1.13——NIM(3)两堆石头的游戏
- 编程之美——NIM(1)一排石头的游戏
- hadoop能用到的系统端口
- 6410 qtopia2.2.0开发:二 编译ARM qtopia2.2.0
- shell脚本实现从某一行开始附加内容
- 程序在后台执行还有对应的tty么
- js金额输入规则
- 编程之美 - 抓石头游戏(2)
- R语言中基本图形的绘制
- 1012. The Best Rank (25)
- MySQL的嵌套事务实现
- Eclipse右击工程菜单中没有Android Tools选项
- LeetCode Binary Tree Level Order Traversal II
- 【spring-mvc】最常用的参数解析讲解
- apache root权限的获取
- 时间