用c++写一段汉诺塔代码
时间: 2023-03-14 14:03:30 浏览: 87
#include<stdio.h>void hanoi(int n, char source, char dest, char aux){
if (n == 1){
printf("从 %c 移动盘子 %d 到 %c\n", source, n, dest);
return;
} hanoi(n-1, source, aux, dest);
printf("从 %c 移动盘子 %d 到 %c\n", source, n, dest);
hanoi(n-1, aux, dest, source);
}int main(){
int n;
printf("输入盘子数量: ");
scanf("%d", &n);
hanoi(n, 'A', 'C', 'B');
return 0;
}
相关问题
c++递归算法汉诺塔
好的,以下是C++递归算法实现汉诺塔的代码:
```c++
#include <iostream>
using namespace std;
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
cout << "Move disk 1 from " << A << " to " << C << endl;
return;
}
hanoi(n-1, A, C, B);
cout << "Move disk " << n << " from " << A << " to " << C << endl;
hanoi(n-1, B, A, C);
}
int main() {
int n;
cout << "Enter the number of disks: ";
cin >> n;
hanoi(n, 'A', 'B', 'C');
return 0;
}
```
在这个代码中,函数 `hanoi` 是递归函数,它的参数 `n` 表示要移动的盘子数,参数 `A`、`B`、`C` 分别表示三个柱子。递归的基础情况是只有一个盘子,直接将它从 `A` 柱子移动到 `C` 柱子。否则,我们需要先将前 `n-1` 个盘子从 `A` 柱子移动到 `B` 柱子上,再将最后一个盘子从 `A` 柱子移动到 `C` 柱子上,最后将前 `n-1` 个盘子从 `B` 柱子移动到 `C` 柱子上。
希望这段代码能对你有所帮助!
c++中汉诺塔问题理解
汉诺塔问题是一个经典的递归问题,它涉及到将一堆盘子从一个柱子移动到另一个柱子,同时遵守以下规则:
1. 每次只能移动一个盘子。
2. 每个盘子只能放在比它大的盘子上面。
以下是C++中解决汉诺塔问题的代码示例:
```cpp
#include <iostream>
using namespace std;
int t = 0;
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
cout << "Move sheet " << n << " from " << A << " to " << C << endl;
t++;
return;
} else {
t++;
hanoi(n - 1, A, C, B);
cout << "Move sheet " << n << " from " << A << " to " << C << endl;
hanoi(n - 1, B, A, C);
}
}
int main() {
int n;
int total;
cout << "请输入盘数:";
cin >> n;
total = hanoi(n, 'A', 'B', 'C');
cout << "total: " << total << endl;
return 0;
}
```
这段代码中,`hanoi`函数使用递归的方式解决汉诺塔问题。它接受四个参数:盘子的数量`n`,起始柱子`A`,辅助柱子`B`和目标柱子`C`。当`n`等于1时,直接将盘子从起始柱子移动到目标柱子,并增加移动次数`t`。否则,先将`n-1`个盘子从起始柱子移动到辅助柱子,然后将最后一个盘子从起始柱子移动到目标柱子,最后将`n-1`个盘子从辅助柱子移动到目标柱子。
运行这段代码,您将看到每一步的移动过程,并输出移动的总次数。
阅读全文