蛇形算法题 谁能找出错误在哪里?
#include <stdio.h>
#define N 100
void main()
{
int i,j;
int tag=0;
int a[N][N];
int num;
int w;//w是行列i,j递增量
int k=1;
i=j=0;
printf("Enter a number (0~100): ");
scanf("%d",&num);
printf("\n");
w=num;//w是行列i,j递增量
while (k<=num*num)
{
tag++;
switch (tag)
{
case 1 :for (;j<w ;j++ ) a[i][j]=k++;
j--; w--; break;//行定列序号递增
case 2 :for (i++;i<=w;i++) a[i][j]=k++;
i--; break;//列定行序号递增
case 3 :for(j--;j>=num-w-1;j--) a[i][j]=k++;
j++; w--; break;//行定列序号递减
case 4 :for(i--;i>=num-w-1;i--) a[i][j]=k++;
i++; j++; break;//列定行序号递减
default : break;
}
if(tag==4) tag=0;//tag返回至0
}
printf("The snake graphic of %d is :\n\n",num);
for (i=0;i<num ;i++ )
{for (j=0;j<num ;j++ )
printf("%4d",&a[i][j]);
printf("\n");
}
}
这是一个蛇形算法题目的程序:输入一个数,例如:5,然后打印如下方式组织的数字。
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
在Turbo C++ 3.0里面调试,编译和连接都没有错误,但输入数字5后就没有任何反应了,请大家帮帮我看看到底是哪里出
问题了,小弟很是不解!
[解决办法]
#include <stdio.h>#define N 4int main() { int i, j, k, t, a[N][N]; t = 1; for (i=1;i<=(N-1)/2+1;i++) { j=i-1; for (k=j;k<N-j;k++) a[j][k] = t++; for (k=j+1;k<N-j;k++) a[k][N-j-1] = t++; for (k=N-j-2;k>=j;k--) a[N-j-1][k] = t++; for (k=N-j-2;k>j;k--) a[k][j] = t++; } for (i = 0; i < N; printf("\n"), i++) for (j = 0; j < N; j++) printf("%d\t", a[i][j]); return 0; }
[解决办法]
w应当是画一圈减一,不应当画一圈之后减二,不然画第二圈的时候就会出错,例如你的程序连输入3都会不行。
while (k <=num*num)
{
tag++;
switch (tag)
{
case 1 :for (;j <w ;j++ ) a[i][j]=k++;
j--; w--; break; //行定列序号递增
case 2 :for (i++;i <=w;i++) a[i][j]=k++;
i--; break; //列定行序号递增
case 3 :for(j--;j> =num-w-1;j--) a[i][j]=k++;
j++;
//w--; //这个地方应该不要
break; //行定列序号递减
//case 4 :for(i--;i> =num-w-1;i--) a[i][j]=k++;
case 4 :for(i--;i> =num-w;i--) a[i][j]=k++;
i++; j++; break; //列定行序号递减
default : break;
}
if(tag==4) tag=0; //tag返回至0
}
printf("The snake graphic of %d is :\n\n",num);
for (i=0;i <num ;i++ )
{for (j=0;j <num ;j++ )
//printf("%4d",&a[i][j]);
printf("%4d",a[i][j]);
printf("\n");
}