HDU The End of The World【递推】

题意: 知道了汉诺塔的一个状态,求把全部汉诺塔移动到B上的步数。

分析: 逆向推即可。

#include<stdio.h>
#include<string.h>
char str[100] ;
long long calc(char A, char B, char C, int n)
{
    if(n==0) 
        return 0 ;
    if(str[n-1]==B) 
        return calc(C,B,A,n-1) ;
    if(str[n-1]==A) 
        return calc(A,C,B,n-1)+(1LL<<(n-1));
}
int main ()
{
    int n ;    
    while(1)
    {
        gets(str) ;
        if(strcmp(str,"X")==0) 
            break ;
        n=strlen(str) ;
        printf("%I64d\n",calc('A','B','C',n)) ;
    }
    return 0 ;
}

 

posted @ 2012-08-25 19:26  'wind  阅读(183)  评论(0编辑  收藏  举报