Hanoi塔

1327: Hanoi双塔问题

时间限制: 1 Sec  内存限制: 128 MB
提交: 23  解决: 7
[提交][状态][讨论版][命题人:外部导入]

题目描述

给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有空的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将 这些国盘移到C柱上,在移动过程中可放在B柱上暂存。要求:

(1)每次只能移动一个圆盘;

(2) ABC三根细柱上的圆盘都要保持上小下大的顺序;

任务:An2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An

输入

输入文件hanoi.in为一个正整数n,表示在A柱上放有2n个圆盘。

输出

输出文件hanoi.out仅一行,包含一个正整数,为完成上述任务所需的最少移动次数An

样例输入

1

样例输出

2

提示

对于50%的数据, 1<=n<=25

对于100% 数据, 1<=n<=200

设法建立AnAn-1的递推关系式。


#include<stdio.h>
#define N 500
int a[N];
void pow(int a[N])
{
    int point=0,i;
    for(i=499;i>=0;i--)
    {
        a[i]=a[i]*2+point;
        if(a[i]>=10)
        {
            a[i]-=10;
            point=1;
        }
        else point=0;
    }
}
int main()
{
    int n,i;
    a[499]=1;
     
    scanf("%d",&n);
    for(i=0;i<=n;i++)
    pow(a);
     
    a[499]-=2;
     
    for(i=0;i<N;i++)
    if(a[i]!=0)
    break;
    for(;i<N;i++)
    printf("%d",a[i]);
 } 

原文地址:https://www.cnblogs.com/zyq1758043090/p/10003083.html