题目:输入盘子数n(n>=2),演示汉诺塔的移动过程,要求:
(1)盘子A,B,C 柱使用字符来绘制,初始时盘子在A 柱上,通过B 柱最终移
动到C 柱上
(2)显示出盘子在几个柱之间的移动过程。
我编的程序:
#include<stdio.h>
#define N 5
void main()
{
void move(int p,int q);
void daxiao(int n);
void kong(int n);
int n=N,p=1,q=0,i;
daxiao(n);
printf("A\n");
kong(n);
printf("B\n");
kong(n);
printf("C\n");
for(i=2^N-1;i<=1;i--)
{
move(p,q);
p++;
}
}
void move(int p,int q)
{
int n;
void yige(int n);
void daxiao(int n);
void kong(int n);
void half(int m,int n);
if(p%2==0)
{
p++;
n--;
}
else
{
p=p;
n=n;
}
while(p%2!=0&&q%2==0)
{
yige(n);
printf("A\n");
daxiao(n-1);
printf("B\n");
half(n+1-q,N);
printf("C\n");
}
while(p%2==0&&q%2!=0)
{
kong(n);
printf("A\n");
daxiao(n-1);
printf("B\n");
half(n+1-q,N);
}
while(p%2!=0&&q%2!=0)
{
daxiao(n-2);
printf("A\n");
yige(n-1);
printf("B\n");
half(n+1-q,N);
}
while(p%2==0&&q%2==0)
{
daxiao(n-2);
printf("A\n");
kong(N);
printf("B\n");
half(n+1-q,N);
}
}
void daxiao(int n)
{
int i,j;
for(i=1;i<=n;i++)
{
printf("|");
for(j=1;j<=i;j++)
printf("__");
printf("|");
printf("\n");
}
}
void kong(int n)
{
int i;
for(i=1;i<=n;i++)
printf("\n");
printf("\n");
}
void yige(int n)
{
int i;
printf("|");
for(i=1;i<=n;i++)
printf("__");
printf("|");
printf("\n");
}
void half(int m,int n)
{
int i,j;
for(i=m;i<=n;i++)
{
printf("|");
for(j=1;j<=i;j++)
printf("__");
printf("|");
printf("\n");
}
}
我的思路真的很混乱,可是我也不知道该怎么写