如图有A、B、C三个柱子,A柱子上从上到下,从小到大套着n个盘。要求每次可移动一个柱子最上面的一个盘子到其他柱子,但必须保证任何时刻每个柱子上的盘子必须是大盘在下,小盘在上。目标是将所有的盘子移动到C柱子。 写C++代码
时间: 2024-11-22 11:36:54 浏览: 24
这是一个经典的汉诺塔问题(Hanoi Tower Problem)的解决方案,通常递归算法会被用来解决。以下是C++代码实现:
```cpp
#include <iostream>
using namespace std;
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n > 0) {
// 递归地将前n-1个盘子从from_rod移到aux_rod
hanoi(n - 1, from_rod, aux_rod, to_rod);
// 将最大的盘子直接从from_rod移动到to_rod
cout << "Move disk " << n << " from rod " << from_rod << " to rod " << to_rod << endl;
// 最后将剩下的n-1个盘子从aux_rod移到to_rod
hanoi(n - 1, aux_rod, to_rod, from_rod);
}
}
int main() {
int n; // 盘子的数量
cout << "Enter the number of disks: ";
cin >> n;
// 调用hanoi函数,开始汉诺塔游戏
hanoi(n, 'A', 'C', 'B');
return 0;
}
```
在这个代码中,`hanoi`函数接受4个参数:当前需要移动的盘子数`n`,起始柱子`from_rod`,目标柱子`to_rod`以及辅助柱子`aux_rod`。当`n > 0`时,会递归地进行操作,直到所有盘子都移至目标柱子。
阅读全文