#include
<
stdio.h
>
void move(unsigned n, char fromd, char tod, char us);
int i = 0 ;
int main()
{
unsigned n;
int j;
printf( " 请输入盘子数: " );
scanf( " %d " , & n);
printf( " 位置 : a b c " );
move(n, ' a ' , ' c ' , ' b ' );
printf( " 共计: %d " ,i);
scanf( " %d " , & n);
return 0 ;
}
void move(unsigned n, char fromd, char tod, char us)
{
if (n > 0 )
{
move(n - 1 ,fromd,us,tod);
++ i;
switch (fromd)
{
case ' a ' :
switch (tod)
{
case ' b ' :
printf( " 第[%d]步: %2d----->%2d " ,i,n,n);
break ;
case ' c ' :
printf( " 第[%d]步: %2d------------->%2d " ,i,n,n);
break ;
}
break ;
case ' b ' :
switch (tod)
{
case ' a ' :
printf( " 第[%d]步: %2d<-----%2d " ,i,n,n);
break ;
case ' c ' :
printf( " 第[%d]步: %2d----->%2d " ,i,n,n);
break ;
}
break ;
case ' c ' :
switch (tod)
{
case ' a ' :
printf( " 第[%d]步: %2d<-------------%2d " ,i,n,n);
break ;
case ' b ' :
printf( " 第[%d]步: %2d<-----%2d " ,i,n,n);
break ;
}
break ;
}
move(n - 1 ,us,tod,fromd);
}
}
/*
编写一个递归程序,解决Hanoi塔问题。要求盘数通过键盘输入控制,打印移动各盘的顺序。 */
void move(unsigned n, char fromd, char tod, char us);
int i = 0 ;
int main()
{
unsigned n;
int j;
printf( " 请输入盘子数: " );
scanf( " %d " , & n);
printf( " 位置 : a b c " );
move(n, ' a ' , ' c ' , ' b ' );
printf( " 共计: %d " ,i);
scanf( " %d " , & n);
return 0 ;
}
void move(unsigned n, char fromd, char tod, char us)
{
if (n > 0 )
{
move(n - 1 ,fromd,us,tod);
++ i;
switch (fromd)
{
case ' a ' :
switch (tod)
{
case ' b ' :
printf( " 第[%d]步: %2d----->%2d " ,i,n,n);
break ;
case ' c ' :
printf( " 第[%d]步: %2d------------->%2d " ,i,n,n);
break ;
}
break ;
case ' b ' :
switch (tod)
{
case ' a ' :
printf( " 第[%d]步: %2d<-----%2d " ,i,n,n);
break ;
case ' c ' :
printf( " 第[%d]步: %2d----->%2d " ,i,n,n);
break ;
}
break ;
case ' c ' :
switch (tod)
{
case ' a ' :
printf( " 第[%d]步: %2d<-------------%2d " ,i,n,n);
break ;
case ' b ' :
printf( " 第[%d]步: %2d<-----%2d " ,i,n,n);
break ;
}
break ;
}
move(n - 1 ,us,tod,fromd);
}
}
/*
编写一个递归程序,解决Hanoi塔问题。要求盘数通过键盘输入控制,打印移动各盘的顺序。 */