題意:塔座1,2,3,塔座1上有n個圓盤,圓盤自上到下,由大到小放。現(xià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程序(剛學(xué),用得有點(diǎn)生澀):
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)
新聞熱點(diǎn)
疑難解答