有三根标为A,B,C的柱子,A柱子上从上到下按金字塔状依次叠放n个半径从1到n的圆盘,要把A上的所有盘子移动到柱子C上,中间可以临时放在B上,但每次移动每一根柱子上都不能出现大盘子在小盘子上方的情况,要求用最少的移动次数完成,用c++完成该程序。
时间: 2024-03-09 21:46:31 浏览: 134
好的,这是一个经典的问题,可以使用递归算法来解决。以下是一个实现代码:
```c++
#include <iostream>
using namespace std;
void hanoi(int n, char A, char B, char C)
{
if (n == 1) {
cout << "Move disk " << n << " from " << A << " to " << C << endl;
} else {
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。当 n 为 1 时,直接将 A 柱子上的盘子移动到 C 柱子上。否则,先将 A 柱子上的 n-1 个盘子移动到 B 柱子上,然后将 A 柱子上的最后一个盘子移动到 C 柱子上,最后将 B 柱子上的 n-1 个盘子移动到 C 柱子上。这样就能保证每次移动都符合要求,且移动次数最少。
阅读全文