解题思路: 将问题最小化用3个盘做实际演示 ...
分类:
编程语言 时间:
2016-08-06 23:17:11
阅读次数:
275
对于知根知底的东西可以用递归,不到万不得已,不推荐使用递归。如文件夹的层数,可以使用递归 递归的效率很低的。递归是在操作栈(不断的出栈和进栈),这个比较耗资源。(汉诺塔问题就是使用递归,函数自己调用自己) >迭代:循环结构,递归:选择结构 >>斐波那契数列,打印前40位的数字 //迭代的实现 pub ...
分类:
其他好文 时间:
2016-08-05 19:32:52
阅读次数:
218
汉诺塔, 得到从初始状态到任意给出状态需要的次数的O(n)算法, 记结论吧??
比如要得到 BCCBABC
则对于原始的AAAAAAA
第一次令 res = ‘A', 然后对于给出的state从大的往小的开始扫, 当前是C所以第7个A变成C, ans += 2^(7 - 1), 然后res = 'B', 也就是剩余的移到B上,
然后第二个需要到B上,且已经在B上, 所以不用管, 继续访问下一位
然后是A, 这个时候把当期大小的盘在B上, 所以移到A上, ans += 2^(5 - 1), 然后res = ’...
分类:
其他好文 时间:
2016-07-31 01:52:02
阅读次数:
256
学习《算法设计与分析基础》,习题2.4 第5题要求为汉诺塔游戏设计一个非递归的算法。 思,不得其解。看书后答案提示: 好吧,话都说得这么直接了,遂百度之,得到一个感觉很好的答案,略做修改,摘录于下: 原文地址:http://blog.sina.com.cn/s/blog_48e3f9cd010004 ...
分类:
编程语言 时间:
2016-07-30 13:36:19
阅读次数:
184
还挺难的,我还是看书知道的 汉诺塔主要是程序需要好好思考,想想还是挺简单的 试题描述 经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK。有三个柱子A,B,C,A柱子上套有n个大小不等的盘子,任意两个盘子,上面的盘子一定小于下面的盘子。现在请你编写程序计算如何将这n个盘子按照规则移 ...
分类:
其他好文 时间:
2016-07-20 09:04:44
阅读次数:
132
问题链接:HDU1996 汉诺塔VI。水题,用C语言编写程序。
本题实际上是计算3^n。编程中需要注意输出格式。
AC的C语言程序如下:
/* HDU1996 汉诺塔VI */
#include
#include
int main (void)
{
int t, n;
scanf("%d",&t);
while(t--)
{
scanf(...
分类:
其他好文 时间:
2016-07-16 07:02:58
阅读次数:
143
题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下: 1. 每一步只允 ...
分类:
其他好文 时间:
2016-07-13 09:14:28
阅读次数:
114
问题简述: 条件:A,B,C 三个塔,A上有若干圆盘; 要求:将A上的所有圆盘移动到C上; 运用:函数递归 设计思想: 函数:void process(int n,char A,char B,char C); 功能:将n个盘子从A 借助 B 移动到C; 1、process(n-1,A,C,B); \ ...
分类:
其他好文 时间:
2016-07-11 18:58:57
阅读次数:
139
f[i][j]表示i上有j个盘子移到g[i][j]上的步数 ...
分类:
其他好文 时间:
2016-07-09 22:11:09
阅读次数:
164