递归(汉诺塔系列)
a1003zoucun
这个作者很懒,什么都没留下…
展开
-
表达式求值
1 模拟法: #include #include #include #define N 10000 using namespace std; int st[N]; char sc[N],s[N]; int add(int a,int b){return a+b;} int max(int a,int b){return a>b?a:b;} int min(int a,i原创 2012-11-16 14:33:01 · 237 阅读 · 0 评论 -
汉诺塔IX
题意不再赘叙,中文的很明了! 点击打开链接 #include #include #include #include #define N 100 using namespace std; unsigned long long a[N],r; //__int64x[N],y[N],z[N]; int hanoi(int n,unsigned long long m) { if(m==0)原创 2012-11-16 22:54:08 · 888 阅读 · 0 评论 -
汉诺塔V
很简单的汉诺塔问题,关键是找规律,其实,在找规律的时用到的也是一种汉诺塔递归移动的思想!点击打开链接 #include #include using namespace std; int main () { int n,k,t; __int64 s; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); s原创 2012-11-16 15:55:01 · 602 阅读 · 0 评论 -
汉诺塔I
题意:给你3根柱子,a,b,c,起始盘全在柱子a上,求当盘全在c柱子上时,盘移动的状况。(数据结构书上有详细描述) #include using namespace std; void hanoi(int n,char a,char b,char c) { if(n>0) { hanoi(n-1,a,c,b); printf("move %d from %c to %原创 2012-11-16 15:02:37 · 337 阅读 · 0 评论 -
New hanoi
/*通过这个题目,个人对汉诺塔有了更深的理解。首先这个hanoi题用了一种贪心的思想,每次先移动最大的盘。因为最大的盘一旦移到最终位置,就不需要再移动了。然后,还有就是汉诺塔移动规则:汉诺塔移动,每次都要通过一根过渡柱子,才能达到ta的终极状态。(问题的关键就在这根过渡柱子),就像要想把标号1柱子上的第k个盘子移动到标号3的柱子上,那么我们必须将k-1个盘通过移动到标号3的柱子移动到标号2的柱子上原创 2012-11-21 14:53:47 · 294 阅读 · 0 评论 -
汉诺塔VIII
/*这个汉诺塔的难点在于如何控制,在指定的步数内终止递归调用。纵观汉诺塔的递归方法,我们不难看出,汉诺塔中间很多步其实都是为了移动最后一个盘子,这样就好办了,现在我们只要看在指定的步数内,能不能移动最后一个盘子就可以了。如果能在指定步数内直接移动第n个盘子,那么就相当于,可以把1柱子上n-1个盘移动到2柱子上,第n个盘子移动到3柱子上;如果不能说明第n个盘仍然只能留在1柱子上,继续试探第n-1个盘原创 2012-11-21 19:58:26 · 423 阅读 · 0 评论 -
汉诺塔 X
/*很简单的一个题目,同样是关于步数的控制问题,可以说和汉诺塔VIII是一模一样的题目*/点击打开链接 #include #include using namespace std; typedef unsigned __int64 LL; LL a[64],x1,y1,val; void hanoi(int n,LL m,int x,int y,int z) { if(m>a原创 2012-11-21 20:44:06 · 584 阅读 · 0 评论