汉诺塔问题c++

题目描述

汉诺塔是一个源于印度古老传说的益智玩具。据说大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘,大梵天命令僧侣把圆盘移到另一根柱子上,并且规定:在小圆盘上不能放大圆盘,每次只能移动一个圆盘。当所有圆盘都移到另一根柱子上时,世界就会毁灭。

请编写程序,输入汉诺塔圆片的数量,输出移动汉诺塔的步骤。假定圆盘从小到大编号为1, 2, ...

输入描述:

 

输入为一个整数(小于20),后面跟三个单字符,用空格分隔。整数为盘子的数目,后三个字符表示三个柱子的编号。

输出描述:

移动汉诺塔的步骤:
每行显示一步操作,具体格式为:
圆盘号:起始柱 -> 目标柱子
其中圆盘号从 1 开始由小到大顺序编号。

代码

#include <iostream>
using namespace std;
void hanoi(int n, char source, char auxiliary, char target) {
    if (n == 1) {
        cout << source << " -> " << target << endl;
    } else {
        hanoi(n - 1, source, target, auxiliary);
        cout  << source << " -> " << target << endl;
        hanoi(n - 1, auxiliary, source, target);
    }
}

int main() {
    int n;
    char source, auxiliary, target;
    cin >> n;
    cin >> source >> auxiliary >> target;
    hanoi(n, source, auxiliary, target);
    return 0;
}

这段代码实现了经典的汉诺塔游戏,根据输入的圆盘数量,输出移动汉诺塔的步骤。

首先,代码定义了一个名为hanoi的递归函数,用于实现圆盘的移动。该函数接受四个参数:n表示当前剩余的圆盘数量,source表示起始柱子,auxiliary表示辅助柱子,target表示目标柱子。

当圆盘数量为1时,即n等于1,代码直接输出移动的步骤,即将起始柱子上的圆盘移动到目标柱子上。

当圆盘数量大于1时,代码通过递归调用hanoi函数,分为三步进行操作:
1. 将n-1个圆盘从起始柱子移动到辅助柱子。这一步通过将辅助柱子作为目标柱子,递归调用hanoi函数实现。
2. 将第n个圆盘从起始柱子移动到目标柱子,直接输出移动的步骤。
3. 将n-1个圆盘从辅助柱子移动到目标柱子。这一步通过将起始柱子作为辅助柱子,递归调用hanoi函数实现。

在main函数中,代码首先读取输入的圆盘数量n,并分别读取起始柱子、辅助柱子和目标柱子的标识字符。

然后,调用hanoi函数,传入圆盘数量n和起始、辅助、目标柱子的信息。

最后,程序返回0,表示正常结束。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值