首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-24 
蛇形算法题谁能找出错误在哪里?#include stdio.h#define N 100void main(){int i,jint tag0int a[N][

蛇形算法题 谁能找出错误在哪里?
#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"); 

热点排行