汉诺塔问题(递归)/梵塔问题c++

简介: 汉诺塔问题(递归)/梵塔问题c++

洛谷 T131261 梵塔问题(递归)

题目背景

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。


题目描述

给定初始圆盘数量,要求输出移动步骤。

输入格式

一个数n,表示初始A杆上圆盘的数量

输出格式

若干行,每行的格式如下:

step x: y -> z

其中x表示这是第几步,y,z为a,b,c三个字母中的某两个,表示该步的具体操作

注意:冒号“:”右侧有一个空格,“->”号两侧各有一个空格

输入输出样例

输入 #1

2

输出 #1

step 1: a -> b
step 2: a -> c
step 3: b -> c

说明/提示

1≤n≤20

参考解答:

#include <iostream>
using namespace std;
int step;
void print(char sta, char fin) {//打印出步骤
  cout << "step " << ++step << ": " << sta << " -> " << fin << endl;
}
void Hanoi(int n, char sta, char fin, char temp) {
  if (n == 1) {
    print(sta, fin);
      return;
    }
    Hanoi(n - 1, sta, temp, fin);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
    print(sta, fin);//将剩下的一个盘子移动到目的塔上
    Hanoi(n - 1, temp, fin, sta);//最后将借用塔上的n-1个盘子移动到目的塔上
  }

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  Hanoi(n, 'a', 'c', 'b');
  return 0;
}
相关文章
|
6月前
|
算法 C++
C++快速幂(递归)
C++快速幂(递归)
|
7月前
|
算法 C++
【C++】递归,搜索与回溯算法入门介绍和专题一讲解
【C++】递归,搜索与回溯算法入门介绍和专题一讲解
|
2月前
|
设计模式 中间件 程序员
【C/C++ 奇异递归模板模式 】C++中CRTP模式(Curiously Recurring Template Pattern)的艺术和科学
【C/C++ 奇异递归模板模式 】C++中CRTP模式(Curiously Recurring Template Pattern)的艺术和科学
24 3
|
26天前
|
C++
C++ 递归与面向对象编程基础
C++ 递归是函数自我调用的技术,用于简化复杂问题。以递归求和为例,`sum` 函数通过不断调用自身累加数字直到 `k` 为 0。递归需谨慎,避免无限循环和资源浪费。面向对象编程(OOP)将程序划分为交互对象,具有属性和方法,提升代码复用、维护和扩展性。C++ OOP 基本概念包括类、对象、属性和方法。通过创建类和对象,利用点语法访问成员,实现代码组织。
24 0
|
4月前
|
Java Go Python
Golang每日一练(leetDay0103) 区域和检索1~3
Golang每日一练(leetDay0103) 区域和检索1~3
30 0
Golang每日一练(leetDay0103) 区域和检索1~3
|
4月前
|
Java Go C++
C/C++每日一练(20230424) 只出现一次的数字、有效的括号、递归反序正整数
C/C++每日一练(20230424) 只出现一次的数字、有效的括号、递归反序正整数
31 0
C/C++每日一练(20230424) 只出现一次的数字、有效的括号、递归反序正整数
|
4月前
|
算法 C++ Java
C/C++每日一练(20230421) 位1的个数、递归和非递归求和、俄罗斯套娃信封问题
C/C++每日一练(20230421) 位1的个数、递归和非递归求和、俄罗斯套娃信封问题
24 0
C/C++每日一练(20230421) 位1的个数、递归和非递归求和、俄罗斯套娃信封问题
|
5月前
|
存储 C++
二叉搜索树详解以及C++实现二叉搜索树(递归和非递归)
二叉搜索树详解以及C++实现二叉搜索树(递归和非递归)
48 0
|
6月前
|
机器学习/深度学习 设计模式 C++
C++模板元模板实战书籍讲解第一章(奇特的递归模板式以及小结和题目)
C++模板元模板实战书籍讲解第一章(奇特的递归模板式以及小结和题目)
45 0