Hanoi

汉诺塔问题(Hanoi)

输入格式:

输入为一个整数后面跟三个单字符字符串。 整数为盘子的数目,后三个字符表示三个杆子的编号。

输出格式:

输出每一步移动盘子的记录。一次移动一行。 每次移动的记录为例如3:a->b 的形式,即把编号为3的盘子从a杆移至b杆。 我们约定圆盘从小到大编号为1, 2, …n。即最上面那个最小的圆盘编号为1,最下面最大的圆盘编号为n。

输入样例:

3 a b c

输出样例:

1:a->c
2:a->b
1:c->b
3:a->c
1:b->a
2:b->c
1:a->c
#include<iostream>
using namespace std;
void hnt(char s,char t,char o,int n,int x)//s 起始 t 终点 o 借助的 n要转移的层数,x是要操作的

{
    if(n==1) 
        printf("%d:%c->%c\n",x,s,t);
    else
    {
        hnt(s,o,t,n-1,x);
        printf("%d:%c->%c\n",x+n-1,s,t);
        hnt(o,t,s,n-1,x);
    }
}
int main()
{
    int n;
    char s,t,o;
    cin>>n>>s>>o>>t;
    hnt(s,t,o,n,1);
}

上面是第一次写的,然后发现不用x这个变量。

#include<iostream>
using namespace std;
void hnt(char s,char t,char o,int n)//s 起始 t 终点 o 借助的 n要转移的层数
{
    if(n==1) 
        printf("%d:%c->%c\n",1,s,t);
    else
    {
        hnt(s,o,t,n-1);
        printf("%d:%c->%c\n",n,s,t);
        hnt(o,t,s,n-1);
    }
}
int main()
{
    int n;
    char s,t,o;
    cin>>n>>s>>o>>t;
    hnt(s,t,o,n);
}

~

遥记大一Hanoi不会做,现在应该是第一次自己写出来Hanoi。
递归函数:忘记这个函数没有完成,就想着这个函数的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值