我在ACM上写了一个N*N阶螺旋阵的题,
代码给你了,可能有点长。
输入5即有结果。
#include
int main()
{
int n,k,a[30][30]={0},x=0,y=0,w[5]={1,1,1,1,1};
scanf("%d",&n);
k=2;
a[0][0]=1;
while(k<=n*n){
if(w[1]&&(x>0&&a[x-1][y]==0)) {
a[x-1][y]=k;
k++;
x--;
if(x>0&&a[x-1][y]==0)
w[1]=1,w[2]=0,w[3]=0,w[4]=0;
else w[1]=0,w[2]=1,w[3]=1,w[4]=1;
}
else if(w[2]&&(y
k++;
y++;
if(y
else w[1]=1,w[2]=0,w[3]=1,w[4]=1;
}
else if(w[3]&&(x
k++;
x++;
if(x
else w[1]=1,w[2]=1,w[3]=0,w[4]=1;
}
else if(w[4]&&(y>0&&a[x][y-1]==0)){
a[x][y-1]=k;
k++;
y--;
if(y>0&&a[x][y-1]==0)
w[1]=0,w[2]=0,w[3]=0,w[4]=1;
else w[1]=1,w[2]=1,w[3]=1,w[4]=0;
}
}
for(k=0;k
for(x=0;x
if(n<=3) printf("%-d",a[k][x]);
else if(n<=9) printf("%-2d",a[k][x]);
else printf("%-3d",a[k][x]);
t=0;
}
else {
if(x==n-1) printf(" %-d",a[k][x]);
else {
if(n<=3) printf(" %-d",a[k][x]);
else if(n<=9) printf(" %-2d",a[k][x]);
else printf(" %-3d",a[k][x]);
}
}
}
printf("\n");
}
return 0;
}
我们刚做过这个题,这是我们老师给出的答案,我也亲自试过,输出结果是正确的,希望能帮到你!呵呵
/***********************************************************************************
>>将螺旋方阵存放到N×N的二维数组中并把它打印输出。要求程序自动生成下图所示螺旋方阵。
>>用#defined定义常量N,要求对N进行更改也能达到相同的效果。
**********************************************************************************/
#include
#define N 5
void main()
{
int arr[N][N]={0}; //建立N*N的二维数组
int i=0,j=0; //标记二维数组的下标
int key,k; //标记每次下标加减的次数
int num=1; //要放入数组的数 ;
key = N-1;
for(key=N-1; key>0; key -= 2)
{
for (k=0; k
arr[i][j] = num;
++i;
++num;
}
for (k=0; k
arr[i][j] = num;
++j;
++num;
}
for (k=0; k
arr[i][j] = num;
--i;
++num;
}
for (k=0; k
arr[i][j] = num;
--j;
++num;
}
++i; //调整下一个周期时数组的横纵坐标
++j;
}
if(0==key)
arr[i][j]=num;
for(i=0; i
for(j=0; j
printf("\n");
}
}