中国传统智力游戏--九连环的递归算法,九连环算法(第1版)
2002-12-06 09:40
393 查看
[摘 要]本文简单介绍了中国传统的智力游戏--九连环,分析了其中的规律,给出了解决问题的算法。
[关键词]九连环、N连环、递归、拆解、安装
一、九连环简介
九连环游戏是中国人自己发明的,它的历史非常悠久,据说是起源于战国时期。九连环主要是由一个框架和九个圆环组成:每个圆环上连有一个直杆,而这个直杆则在后面一个圆环内穿过,九个直杆的另一端用一块木板或圆环相对固定。
二、九连环的规律
通过玩九连环你就会发现存在这样一个规律:
(1)第 1 环可以自由上下
(2)而上/下第 n 环时(n>1),则必须满足:
(a)第 n-1 个环在架上
(b)前 n-2 个环全部在架下
三、拆解/安装的过程
正确的拆解是先以第 9 环为目标,先拆下它,简化为拆一个 8 连环。接着再也第 8 环为目标,拆下它,简化为拆一个 7 连环。以此类推,直至全部拆解。
其实安装和拆解是一个道理,因为他们均是使用上面说的规律来完成的。
正确是安装也是先以第 9 环为目标,先装上它,简化为装一个 8 连环。接着再也第 8 环为目标,装上它,简化为装一个 7 连环。以此类推,直至全部安装。
当然,现在这么说是便于理解,当你深刻的理解了上面所说的规律后,就会发现,安装上第 9 环后,问题可以被简化为装一个 7 连环,而当装上第 7 环后,问题就被简化为装一个 5 连环了,呵呵,就是这样的,不知道你现在是否明白我的意思……
四、一个猜想
仔细观察九连环的结构、思考九连环的规律及拆解/安装的过程,你是不是有一种感觉:九连环跟递归一定有联系。你看,递归的基本思想是把一个大的问题分解为一个规模较小的问题,从这些较小问题的解,构造出大问题的解,而这些规模较小的问题,用同样的方法分解成更小的问题,从更小问题的解,构造出较小的问题,一层层下去,一般最后总是可以分解到可以直接求解的小问题。嘿嘿,九连环的拆解/安装多么的符合这个规律啊……^_^
五、算法实现
以下是算法实现,程序写的很简洁,省略了很多功能的实现,比如计数等,如果你觉得有必要的话,可以自行添加上去,我相信很容易,并不要很多的改动。
The C Code Here:
/****************************/
任意 N 连环均适用
日期:2002/11/6
程序设计:道可道
腾讯QQ:3908000
电邮:Havelife@mail.csdn.net
/****************************/
void UpRing(); /*函数声明*/
void DownRing(int n) /*下环逻辑*/
{
if(n>2) DownRing(n-2);
printf("下第%d环/n",n);
if(n>2) UpRing(n-2);
if(n>1) DownRing(n-1);
}
void UpRing(int n) /*上环逻辑*/
{
if(n>1) UpRing(n-1);
if(n>2) DownRing(n-2);
printf("上第%d环/n",n);
if(n>2) UpRing(n-2);
}
void main() /*主 函 数*/
{
printf("拆解/n");
DownRing(9);
printf("安装/n");
UpRing(9);
printf("结束/n");
}
2002年九连环算法第1版:中国传统智力游戏--九连环的递归算法(九连环算法第1版)
2006年九连环算法第2版:九连环的递归算法(九连环算法第2版)
2016年九连环算法第3版:九连环算法(第3版)
[关键词]九连环、N连环、递归、拆解、安装
一、九连环简介
九连环游戏是中国人自己发明的,它的历史非常悠久,据说是起源于战国时期。九连环主要是由一个框架和九个圆环组成:每个圆环上连有一个直杆,而这个直杆则在后面一个圆环内穿过,九个直杆的另一端用一块木板或圆环相对固定。
二、九连环的规律
通过玩九连环你就会发现存在这样一个规律:
(1)第 1 环可以自由上下
(2)而上/下第 n 环时(n>1),则必须满足:
(a)第 n-1 个环在架上
(b)前 n-2 个环全部在架下
三、拆解/安装的过程
正确的拆解是先以第 9 环为目标,先拆下它,简化为拆一个 8 连环。接着再也第 8 环为目标,拆下它,简化为拆一个 7 连环。以此类推,直至全部拆解。
其实安装和拆解是一个道理,因为他们均是使用上面说的规律来完成的。
正确是安装也是先以第 9 环为目标,先装上它,简化为装一个 8 连环。接着再也第 8 环为目标,装上它,简化为装一个 7 连环。以此类推,直至全部安装。
当然,现在这么说是便于理解,当你深刻的理解了上面所说的规律后,就会发现,安装上第 9 环后,问题可以被简化为装一个 7 连环,而当装上第 7 环后,问题就被简化为装一个 5 连环了,呵呵,就是这样的,不知道你现在是否明白我的意思……
四、一个猜想
仔细观察九连环的结构、思考九连环的规律及拆解/安装的过程,你是不是有一种感觉:九连环跟递归一定有联系。你看,递归的基本思想是把一个大的问题分解为一个规模较小的问题,从这些较小问题的解,构造出大问题的解,而这些规模较小的问题,用同样的方法分解成更小的问题,从更小问题的解,构造出较小的问题,一层层下去,一般最后总是可以分解到可以直接求解的小问题。嘿嘿,九连环的拆解/安装多么的符合这个规律啊……^_^
五、算法实现
以下是算法实现,程序写的很简洁,省略了很多功能的实现,比如计数等,如果你觉得有必要的话,可以自行添加上去,我相信很容易,并不要很多的改动。
The C Code Here:
/****************************/
任意 N 连环均适用
日期:2002/11/6
程序设计:道可道
腾讯QQ:3908000
电邮:Havelife@mail.csdn.net
/****************************/
void UpRing(); /*函数声明*/
void DownRing(int n) /*下环逻辑*/
{
if(n>2) DownRing(n-2);
printf("下第%d环/n",n);
if(n>2) UpRing(n-2);
if(n>1) DownRing(n-1);
}
void UpRing(int n) /*上环逻辑*/
{
if(n>1) UpRing(n-1);
if(n>2) DownRing(n-2);
printf("上第%d环/n",n);
if(n>2) UpRing(n-2);
}
void main() /*主 函 数*/
{
printf("拆解/n");
DownRing(9);
printf("安装/n");
UpRing(9);
printf("结束/n");
}
2002年九连环算法第1版:中国传统智力游戏--九连环的递归算法(九连环算法第1版)
2006年九连环算法第2版:九连环的递归算法(九连环算法第2版)
2016年九连环算法第3版:九连环算法(第3版)
相关文章推荐
- 华容道(传统智力游戏)
- 九连环的递归算法,九连环算法(第2版)
- 安卓平台最好的中国象棋,让智力游戏充满趣味性!
- 某游戏公司“中国传统服装史”培训圆满结束!
- 张书乐:为什么中国每个爆款游戏背后,都站着个孙悟空?
- 编程之美--游戏之乐--1.2中国象棋将帅问题
- 中国传统的婚姻观,害了男人,也害了女人
- 复旦教授:韩国对保存中国传统文化有贡献
- 中国网络游戏发展简史
- 中国的服务业: 从银行, 到电信, 再到网络游戏, 总体上的问题是, 服务差, 气死客户不负责任....
- 中国游戏市场 你值得关注
- IBM中国研究院、SAP、网易游戏、IBM2015应届生招聘笔试面试问题分享
- 花里看雾:在互联网内看传统中国IT行业
- 游戏的传统结构
- 第1、2、3、4章传统的测试后行开发过程
- 一道智力游戏趣味编程题
- 给力啊, 我做的《点点钻石》 for iPad(新增双人PK玩法)现在已经冲入了中国区游戏总榜...
- 家用游戏机禁令取消后的中国游戏市场
- flex 联机游戏开发 - 中国象棋游戏:(一)核心逻辑
- javascript sudoku 数独智力游戏生成代码