关于九连环
来源:互联网 发布:gartner报告 人工智能 编辑:程序博客网 时间:2024/04/28 06:31
以前回复一个帖子,是关于9连环解法的问题,看过《计算机程序设计艺术》的人都知道,这个问题的是中国的古老游戏,其解法就是“格雷二进制”的描述。
这个帖子如下:
九连环是一种传统的中国玩具,它有九个连在一起的环河一根长棒组成。一开始,九个环都装在榜上,由于其特殊的构造,只能按以下规则从棒上取下或装上环:
1)所有环只能从棒的一端取下。将环按距离这一端的远近从近到远依次编号为1~9号环。无论知名移动环,环的顺序都不会改变
2)1号环随时可以取下或装上
3)当K-1(K=2-9)号之前的环(不包含K-1号环)全部被取下,K-1号环还在棒上时,可将K号环取下或装上
已有以下两个函数
UpOne(int idx);//装上某个序号的环(无法装上时不会有动作)
DownOne(int idx);//卸下某个序号的环(无法卸下时不会有动作)
请写出装上和卸下全部环的函数,并且将具体实现的C#代码写出(需用控制台输出)
有很多网友提出了各种不同的解决方案,也不乏写了大篇代码的。
其实这个问题说起来很简单,下面是我的解决方案
这个问题上帝已经解决把公式描述出来了,是格雷二进制编码的问题,大师的名字就叫高纳德.克努特
公式就是
T0=空
Tn+1="0"+Tn,"1"+Tn的逆
参考<<计算机程序设计艺术 第四卷 第二册>>
比如T0=空
则T1={0,1}
T2=0{0,1},1{1,0}=00,01,11,10
T3=0{00,01,11,10},1{10,11,01,00}
=000,001,011,010,110,111,101,100
...依次类推
T9=...
这个组合里包含了所有的可能性,注意到按这个方法形成的组合无论往左还是往右,都只有一个位变化了
如果是3连环的话,将环套上的顺序是000,001,011,010,110,111
环取下的顺序正好相反
要判断在每个状态下具体一个环是否能套上,则判断该状态右边的值是否与该环对应的值不同
要判断在每个状态下具体一个环是否能取下,则判断该状态左边的值是否与该环对应的值不同
算法就是这样,程序自己写吧
- 关于九连环
- 九连环
- 九连环问题解决
- 九连环的解法
- 九连环问题解决
- 九连环玩法
- 九连环-递归解法
- 玩九连环
- 九连环所有步骤
- 玩九连环
- hrbust 1401 九连环
- Android版九连环NingRings
- 九连环分析与实现
- 九连环解法java版
- 连环锁 POJ - 1832(九连环的推广)
- asp.net 实现“九连环”小游戏
- 用asp.net 实现“九连环” 小游戏
- asp.net实现“九连环”小游戏
- orcale中3大范式总结
- Java枚举--交通灯
- Dropbox可再增加2G空间
- 一线网页游戏程序员日志 (十六)
- 嵌入式框架iframe在Zend Framework中的应用
- 关于九连环
- LUA注册简单C++类代码走读
- 入口程序集上缺少[NeutralResourceLanguage]属性(2003)
- 把打印稿变成电子稿
- Java中Override和Overload的区别
- activiti学习
- JQuery动画效果
- 数组作为函数返回值
- android xml的属性