读书人

蛇形算法题 哪位高手能找出异常在哪里

发布时间: 2012-02-24 16:30:38 作者: rapoo

蛇形算法题 谁能找出错误在哪里?
#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后就没有任何反应了,请大家帮帮我看看到底是哪里出

问题了,小弟很是不解!


[解决办法]

C/C++ code
#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");
}

读书人网 >C语言

热点推荐