原题链接:https://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/1200.html
题目描述:
解题思路:
0.为了将所有金片都从A移动到C,
1.想把n个金片放到C棒上,就必须先将n-1个金片放到B棒上,而想把n-1(假设n-1>0, 以下同)个金片放到B棒上,就必须先将n-2个金片放到C棒上,想把n-2个金片放到C棒上,就必须将n-3个金片放到B棒上······以此类推,就是递归的过程;
代码:
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<string>
#include<cstring>
#include<cmath>
#define vint vector<int>
#define vstr vector<string>
#define vll vector<long long>
#define pf printf
#define sf scanf
#define pft printf("\t")
#define pfn printf("\n")
using namespace std;
void F(int n, char a, char b, char c) {
if( n==1 ) {
cout << "Move disk " << n << " from " << a << " to " << c;
pfn;
}else {
F(n-1, a, c, b); //将n-1个金片放到B棒上;
cout << "Move disk " << n << " from " << a << " to " << c;//将第n个金片移到C棒上
pfn;
F(n-1, b, a, c); //在B棒上的n-1个金片移到C棒上
}
}
int main(){
int n;
cin >> n;
F(n, 'A', 'B', 'C');
return 0;
}