Nim Game,一个有趣的游戏,也是一道入门算法题。
来源:互联网 发布:手机淘宝外卖在线订餐 编辑:程序博客网 时间:2024/05/29 16:05
Nim Game,其实很多人都玩过。其实就是我们玩的划线游戏。
一张纸上,画若干条线,双方一人划一次,每次划掉1~3条线。可以选择画1条,也可以划2条,也可以3条。具体划去几条线完全看自己的策略。谁划掉最后一条线,就是赢家。
如上图,蓝方获胜。
正在看这篇文章的你一定是一个聪明人,每一步都是最优解,而你的对手,也跟你一样聪明,每步都是最优的解法。
现在你作为先手,在线条总数为多少的时候,你必赢呢,又在多少的时候必输呢?
可不可以用一个函数来判断在线条总是为x时你的输赢情况呢?这样你以后跟别人玩这个游戏的时候就不会输啦。
答案是可以,不过我们要先来分析一下这个问题。
在线的总是为多少的时候一定会输呢。
每人每步最多划三条线,所以线的总是至少为4条。当线的总数为4条的时候,不管先手划几条线,后手都有应对的方法,先手必输。
所以你会发现8条也是必输,8条线可以分成两个部分,每个部分四条线。自然先手还是必输。4这个数字还真是不太吉利。
当线的总数为5条的时候,先手先划掉一条线,后手就等于是在4条线的情况下先手,自然后手输。
而6条 7条 先手都可以划掉2条线和3条线来让后手落入“4”的陷阱。
所以我们可以看出,我们只要远离”4“就行了。当线的总数不是4的倍数的时候,先手必赢。
看到这里,恭喜你掌握了必胜法则,下次各位盆宇就可以用这个游戏跟别人打赌了。
所以现在我们可以将我们的结论写到代码里了。
在这里我将实现一个C语言的函数:
bool canWin(int n) { return n%4;}
参数 n 代表的是线条的总数。 通过线条总是是否能被4整除来判断这场比赛中作为先手的你必赢还是必输。
当 n%4 的结果为0时意味着n能被4整除,返回0,转换为布尔值为false。
当n%4不等于0时意味这n不能被4整除,返回非0,转换为布尔值为true。
好了,下次玩这个游戏你就知道该怎么玩了吧。(手动斜眼)
- Nim Game,一个有趣的游戏,也是一道入门算法题。
- 一道有趣的算法题
- 一道有趣的算法题
- 一道有趣的算法题。。。
- Nim游戏 Nim Game
- 一道有趣的数字算法题
- 一道有趣的面试算法题
- 一道有趣的GOOGLE算法题
- 一道有趣的字符串算法题
- 一道有趣的题
- 有趣的一道题
- Nim游戏(Nim入门经典题)
- 一个有趣的游戏
- 一个有趣的算法题
- im Game nim游戏
- Nim Game 博弈游戏
- 一道有趣的算法题:仿照Excel的列编号,给定一个数字,输出该列编号字符串
- 一个有趣的算法
- ArcGIS Server 安装时遇到的端口被占用问题
- ThinkPHP 自动验证及验证规则详解
- OpenGL渲染流程
- Servlet
- 一个简单的PDF文件结构的分析
- Nim Game,一个有趣的游戏,也是一道入门算法题。
- struct和Union的区别
- 【重走普及路】【递归】台阶问题
- Spark快速入门指南(Quick Start Spark)
- 设置NetBeans的编辑器字体为抗锯齿
- C++小题(四)
- 努力学习Spark技术,顺应大数据开发潮流
- `.bss' will not fit in region `m_data' 内存越界
- sklearn系列之----线性回归