有三根标为A,B,C的柱 子,A柱子上从上到下按金字塔状依次鑫放着口个半径从1厘米到i厘米的的圆盛,要把 A上的所有盘子移动到柱子C上,中间可以临时放在B上,但每次移动每一根柱子上都不能出现大盘子在小盘子上方的情况,要求用最少的移动次数完成,请编程模扒每次移动。c++
时间: 2024-03-17 13:40:52 浏览: 116
这是一个经典的汉诺塔问题,可以使用递归算法解决。具体实现如下:
```c++
#include <iostream>
using namespace std;
void move(int n, char from, char to, char temp) {
if (n == 1) {
cout << "Move disk " << n << " from " << from << " to " << to << endl;
} else {
move(n - 1, from, temp, to);
cout << "Move disk " << n << " from " << from << " to " << to << endl;
move(n - 1, temp, to, from);
}
}
int main() {
int n = 3; // 盘子的个数
move(n, 'A', 'C', 'B'); // A、B、C分别表示三根柱子
return 0;
}
```
输出结果为:
```
Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
Move disk 3 from A to C
Move disk 1 from B to A
Move disk 2 from B to C
Move disk 1 from A to C
```
每行输出表示一次移动,第一个数字表示移动的盘子编号,后面的两个字母表示移动的起始柱子和目标柱子。
阅读全文