Problem Description

现在有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请输出实现最小移动次数的方案。
每一步输出一行P-> Q表示将P柱上的最上方盘子移动到Q柱。

Input

多组数据,每组一个整数n

Output

输出题目要求,每组数据间用空行隔开。

Sample Input

1
2
3

Sample Output

A->C

A->B
A->C
B->C

A->C
A->B
C->B
A->C
B->A
B->C
A->C
#include <stdio.h>

void hanio(char a,char b,char c,int n)
{
if (n==1)
printf("%c->%c\n",a,c);
else
{
hanio(a,c,b,n-1);
printf("%c->%c\n",a,c);
hanio(b,a,c,n-1);
}
}

int main()
{
int n,sp=0;
while(scanf("%d",&n)!=EOF)
{
if(sp!=0)
printf("\n");
sp++;
hanio('A','B','C',n);
}
return 0;
}


posted on 2011-11-30 00:42  小狗狗ACM  阅读(220)  评论(0)    收藏  举报