标签:etc printf nbsp cstring step dig 开始 name color
汉诺塔,经典的递归。
经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK。有三个柱子A,B,C,A柱子上套有n个大小不等的盘子,任意两个盘子,上面的盘子一定小于下面的盘子。现在请你编写程序计算如何将这n个盘子按照规则移到C柱子上,每次只能移动一个盘子,移动过程中可以借助B柱子,任意状态,各个柱子的盘子必须小盘在放在大盘子上面。现在输入两个正整数n,表示有n个盘子,请输出他的每一次移动。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if(ch==‘-‘) f=-1; for(;isdigit(ch);ch=getchar()) x=x*10+ch-‘0‘; return x*f; } int n,step; void hanoi(int now, char from, char use, char to) { if( !now) return ;//如果没盘子了,就不用移动了 step++;//加步数 printf("step %d: from %c to %c\n",step,from,to);//输出现在 hanoi(now-1,from,to,use);//先把开始移动的柱子上所有盘子移动到借助柱子上 hanoi(now-1,use,from,to);//然后再把借助柱子上的所有盘子移动到最终柱子上 return ; } int main() { n=read(); hanoi(n,‘A‘,‘B‘,‘C‘);//从A借助B移动到C }
标签:etc printf nbsp cstring step dig 开始 name color
原文地址:http://www.cnblogs.com/ysmor/p/6057803.html