用c++写一下汉诺塔问题,要求移动汉诺塔的步骤 每行显示一步操作,具体格式为: 盘片号: 起始柱 -> 目的柱 其中盘片号从 1 开始由小到大顺序编号。
时间: 2024-02-17 11:05:11 浏览: 64
好的,以下是用C++实现汉诺塔问题并按照要求输出每一步操作的代码:
```c++
#include <iostream>
using namespace std;
void hanoi(int n, char a, char b, char c, int& step) {
if (n == 1) {
cout << ++step << ": " << a << " -> " << c << endl;
return;
}
hanoi(n - 1, a, c, b, step);
cout << ++step << ": " << a << " -> " << c << endl;
hanoi(n - 1, b, a, c, step);
}
int main() {
int n; // 汉诺塔层数
cout << "请输入汉诺塔的层数:";
cin >> n;
int step = 0; // 步数
hanoi(n, 'A', 'B', 'C', step);
return 0;
}
```
在这个代码中,我们在 `hanoi` 函数中增加了一个 `step` 参数,用来记录移动的步数。在移动第 `n` 层盘子时,我们先递归地将前 `n-1` 层盘子从第一个柱子移动到第二个柱子上,再将第 `n` 层盘子从第一个柱子移动到第三个柱子上,并输出当前的步数和移动的起始柱子及目的柱子。最后再递归地将前 `n-1` 层盘子从第二个柱子移动到第三个柱子上。
在 `main` 函数中,我们先让用户输入汉诺塔的层数,然后调用 `hanoi` 函数进行移动,并记录每一步操作的步数和起始柱子及目的柱子,并按照要求输出。
阅读全文