题意:塔座1,2,3,塔座1上有n个圆盘,圆盘自上到下,由大到小放。现在要求将塔座1上圆盘移到2上,每次只能移一个且大盘不能放在小盘上,可以将圆盘移到1,2,3任意一个上。
#include<iostream>#include<cstdio>using namespace std;int ans;void move(int a,int b){ ans++; PRintf("第%d步=%d->%d/n",ans,a,b);}void hanoi(int n,int a,int b,int c){ if(n>0){ hanoi(n-1,a,c,b); move(a,b); hanoi(n-1,c,b,a); }}int main(){ int n; while(~scanf("%d",&n)){ ans=0; hanoi(n,1,2,3); printf("%d/n",ans); } return 0;}方法二:
#include<iostream>#include<cstdio>#include<cmath>using namespace std;int main(){ int n,ans; while(~scanf("%d",&n)){ ans=pow(2,n)-1; printf("%d/n",ans); } return 0;}python程序(刚学,用得有点生涩):
ans=0def move(a,b): global ans ans=ans+1 a=int(a) b=int(b) print("第%d步: %d->%d"%(ans,a,b))def hanoi(n,a,b,c): if n>0: hanoi(n-1,a,c,b) move(a,b) hanoi(n-1,c,b,a)n=input()n=int(n)hanoi(n,1,2,3)print(ans)更简单的方法:import mathn=input()n=int(n)ans=2**n-1print(ans)
新闻热点
疑难解答