汉诺塔,经典的递归。
经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就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() { ,f=;char ch=getchar(); ; +ch-'; 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-,from,to,use);//先把开始移动的柱子上所有盘子移动到借助柱子上 hanoi(now-,use,from,to);//然后再把借助柱子上的所有盘子移动到最终柱子上 return ; } int main() { n=read(); hanoi(n,'A','B','C');//从A借助B移动到C }