有三根标为A,B,C的柱子,A柱子上从上到下按金字塔状依次叠放着n个半径从1厘米到n厘米的的圆盘,要把A上的所有盘子移动到柱子C上,中间可以临时放在B上,但每次移动每一根柱子上都不能出现大盘子在小盘子上方的情况,要求用最少的移动次数完成,请编程模拟每次移动。 输入 占一行,为整数n(n<64),表示盘子数。 输出 把A上的所有盘子移动到柱子C上,每次只能移动一个盘子,输出移动每一次过程。每次移动占一行,第一个数表示第几步移动,第二个数是移动的盘子的半径,然后是从哪个柱子移动到哪个柱子。 样例输入 复制 2 样例输出 复制 1 1 A->B 2 2 A->C 3 1 B->C c++实现
时间: 2024-03-16 12:42:49 浏览: 74
好的,以下是 C++ 代码实现。这里使用了递归的思想,将问题分解为小问题,然后逐步解决。
```cpp
#include <iostream>
using namespace std;
// 将n个盘子从A柱移动到C柱,使用B柱作为中转
void hanoi(int n, char A, char B, char C) {
if (n == 1) { // 只有一个盘子时,直接从A柱移动到C柱
cout << "1 " << n << " " << A << "->" << C << endl;
} else { // 有n个盘子时,先将n-1个盘子从A柱移动到B柱,再将最后一个盘子从A柱移动到C柱,最后将n-1个盘子从B柱移动到C柱
hanoi(n-1, A, C, B); // 将n-1个盘子从A柱移动到B柱,使用C柱作为中转
cout << n << " " << n << " " << A << "->" << C << endl; // 将最后一个盘子从A柱移动到C柱
hanoi(n-1, B, A, C); // 将n-1个盘子从B柱移动到C柱,使用A柱作为中转
}
}
int main() {
int n;
cin >> n; // 输入盘子的个数
hanoi(n, 'A', 'B', 'C'); // 将n个盘子从A柱移动到C柱,使用B柱作为中转
return 0;
}
```
你可以将上述代码复制到 C++ 环境中运行,测试一下。如果你有其他问题,可以继续问我。
阅读全文