题目
有三个柱子分别是A、B、C,其中A柱子上有若干盘子,要将盘子从A柱上移动到C柱上,注意A柱子上的盘子是从大到小(从下到上)排列,大盘子不能放在小盘子上,不然会碎掉。
程序思路
我们可以将其划分为大小问题的方法,即:先将A中n-1个盘子通过C柱子移动到B柱,之后将第n个盘子移到C柱上,最后将B柱上的n-1个盘子通过A柱移到C柱上。这样便可以解决问题。
程序代码
#include <bits/stdc++.h>
using namespace std;
void move(int n,char x,char y)
{
cout << "将" << n << "从" << x << "移到" << y << "中" << endl;
}
void Hanno_tower(int n,char a,char b,char c)
{
//这里只是需要一个出口 ,不然程序会陷入死循环
if(n==0){
// cout << "将" << n << "从" << a << "移到" << c << "中" << endl;
return;
}
Hanno_tower(n-1,a,c,b);//将n-1个盘子从a中通过c移动到b柱上
move(n,a,c);//
Hanno_tower(n-1,b,a,c);//将n-1个盘子从b中通过a移动到c柱上
}
int main()
{
int n;
cin >> n;
Hanno_tower(n,'A','B','C');
return 0;
}
实验结果
样例一:输入3(表示3个碟子)
样例二:输入4(表示4个碟子)