汉诺游戏规则如下:
1、有三根相邻的柱子,标号为A,B,C。
2、A柱子从下到上按金字塔状叠放着n个不同大小的圆盘。
3、现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。
解决方法:
解决
为了解决这个问题,不妨假设已经知道怎样移动N-1个圆环了。现在,为了把起点盘A盘上的圆环移动到目标盘C盘,假设盘子分别为ABC:
1、把N-1个圆环从A盘移动到(当前)没有任何圆环的过度盘B盘;
2、把最后一个圆环从A盘移动到C盘;
3、把N-1个圆环从B盘移动到C盘(模仿1和2的操作方法来分解问题求解)。
#include<iostream> using namespace std; void hannoi(int n, char A, char B, char C) { if (n == 1) { cout << "A到C" << endl; } else { hannoi(n - 1, A, C, B); cout<< "A到B" << endl; hannoi(n - 1, B, A, C); cout << "B到C" << endl; } } int main(int argc, const char* argv[]) { int n; cout << "请输入n的值" << endl; cin >> n; hannoi(n, 'A', 'B', 'C'); return 0; }