首页 > 学院 > 开发设计 > 正文

汉诺塔问题

2019-11-06 06:13:07
字体:
来源:转载
供稿:网友

题意:塔座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)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表