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;
}

浙公网安备 33010602011771号