[摘 要]本文简单介绍了中国传统的智力游戏–九连环,分析的其中的规律,给出了解决问题
的算法。
[关键词]九连环、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 连环均适用 */
/* 程序设计: 吴文绛 */
/* E-mail:havelife@hotmail.com */
/* 日期:2002/11/6 */
/* 腾讯QQ:3908000 */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”);
}
-
近期文章
近期评论
- coolker 发表在《打造最快的Hash表》
- struggle 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- diys 发表在《C语言编程宝典(王大刚) 1.1 C 语言的产生与发展》
文章归档
- 2022 年十月
- 2014 年一月
- 2013 年十二月
- 2012 年十一月
- 2012 年七月
- 2012 年六月
- 2012 年五月
- 2012 年四月
- 2012 年三月
- 2012 年二月
- 2011 年十二月
- 2011 年十月
- 2011 年九月
- 2011 年八月
- 2011 年七月
- 2011 年六月
- 2011 年五月
- 2011 年四月
- 2011 年三月
- 2011 年二月
- 2011 年一月
- 2010 年十二月
- 2010 年十一月
- 2010 年十月
- 2010 年九月
- 2010 年八月
- 2010 年七月
- 2010 年六月
- 2010 年五月
- 2010 年四月
- 2010 年三月
- 2010 年二月
- 2010 年一月
- 2009 年十二月
- 2009 年十一月
- 2009 年十月
- 2009 年九月
- 2009 年八月
- 2009 年七月
- 2009 年六月
- 2009 年五月
- 2009 年四月
- 2009 年三月
- 2009 年二月
- 2009 年一月
- 2008 年十二月
- 2008 年十一月
- 2008 年十月
- 2008 年九月
- 2008 年八月
- 2008 年七月
- 2008 年六月
- 2008 年五月
- 2008 年四月
- 2008 年三月
- 2008 年二月
- 2008 年一月
- 2007 年十二月
- 2007 年十一月
- 2007 年十月
- 2007 年九月
- 2007 年八月
- 2007 年七月
- 2007 年六月
- 2007 年三月
- 2007 年二月
- 2007 年一月
- 2006 年十二月
- 2006 年十一月
- 2006 年十月
- 2006 年九月
- 2006 年八月
- 2006 年七月
- 2006 年六月
- 2006 年五月
- 2006 年四月
- 2006 年三月
- 2006 年二月
- 2006 年一月
- 2005 年十二月
- 2005 年十一月
分类目录
功能