初级汉诺塔问题(递归求解)

使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下:

第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;
}

猜你喜欢

转载自blog.csdn.net/weixin_42429718/article/details/88426390