#include <bits/stdc++.h>
using namespace std;
int n;
/*
把 N- 1个从A经过C移动到B,最后一个从A到C
N- 1个在B上,经过A移动到C
*/
void hanuoti(int n,char A,char B,char C){
if(!n)
return;
else{
hanuoti(n - 1,A,C,B);
//cnt++;记录移动的次数
printf("Move disk %d from %c to %c\n",n,A,C);
hanuoti(n - 1,B,A,C);
}
}
int main(){
scanf("%d",&n);
hanuoti(n,'A','B','C');
return 0;
}
用递归计算移动容易超时,
借助公式 2^n - 1
当数据太大时,公式无效,算不出大数
例如:
P760通天之汉诺塔
#include <bits/stdc++.h>
using namespace std;
int n;
stringstream b;
string c;
int main(){
//freopen("out","w",stdout);
cin >> n;
b.precision(0);
b << fixed << pow(2.0L,n);
c = b.str();
c[c.length() - 1]--;
cout << c;
return 0;
}
来源:CSDN
作者:gululuzhigululu
链接:https://blog.csdn.net/xcfkaixin/article/details/104112304