使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下:
第1步:1号盘从A柱移至B柱
第2步:2号盘从A柱移至C柱
输入
多组测试用例,每组输入一个正整数n,n代表圆盘数量。
输出
每组输出之间有一行空行。
样例输入
3
样例输出
第1步:1号盘从A柱移至C柱
第2步:2号盘从A柱移至B柱
第3步:1号盘从C柱移至B柱
第4步:3号盘从A柱移至C柱
第5步:1号盘从B柱移至A柱
第6步:2号盘从B柱移至C柱
第7步:1号盘从A柱移至C柱
个人分析:
递归思想:
先将n-1块从A柱移至B柱 然后将最大的那个放在C柱 最后通过A柱将n-1块从B柱移至C柱
本题难点在于输出格式那里,需要想一会的
具体代码如下:
AC
#include<iostream>
using namespace std;
#include<cstdio>
int res=0;
void printf(int k,char m,char n)
{
res++;
{
printf("第%d步:%d号盘从%c柱移至%c柱\n",res,k,m,n);
}
}
void hanoi(int n,char a,char b,char c)
{
if(n>0)
{
hanoi(n-1,a,c,b);
printf(n,a,c);
hanoi(n-1,b,a,c);
}
}
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
res=0;
hanoi(n,'A','B','C');
cout<<endl;
}
return 0;
}