题意: 知道了汉诺塔的一个状态,求把全部汉诺塔移动到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 ; }