将1、2、3...、n2放入二维数组中,放数的顺序如下图=4的情况。
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
我根据楼主的意思做了一个:
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
int main()
{
int num,i,j,is,ie,js,je,k,l,n,direc,flag,a[SIZE][SIZE];
while(scanf("%d",&num)!=EOF)
{memset(a,0,sizeof(a));
n=0;
direc=-1;
flag=1;
i=0;
while(n+1<=num*num)
{
direc=(-1)*direc;
if(direc==1)
{is=flag;
ie=num-flag+1;
js=flag-1;
je=num-flag+1;}
else
{is=num-flag-1;
ie=flag;
js=num-flag-1;
je=flag-1;
flag++;}
j=js;
while(((j<je&&direc==1)||(j>=je&&direc==-1))&&n+1<=num*num)
{n++;
a[i][j]=n;
j=j+direc;}
j=j-direc;
i=is;
while(((i<ie&&direc==1)||(i>=ie&&direc==-1))&&n+1<=num*num)
{n++;
a[i][j]=n;
i=i+direc;}
i=i-direc;
}
for(i=0;i<num;i++)
{for(j=0;j<num;j++)
printf("%4d",a[i][j]);
printf("\n");}
}
}
输入以EOF结束。
欢迎批评指正。
这个是螺旋矩阵啊!!我有个高手写的代码啊!!
#include <stdio.h>
#define N 8
main(){
int i,j,n=1,a[N][N];
for(i=0;i<=N/2;i++){
for(j=i;j<N-i;j++)
a[i][j]=n++;
for(j=i+1;j<N-i;j++)
a[j][N-i-1]=n++;
for(j=N-i-2;j>i;j--)
a[N-i-1][j]=n++;
for(j=N-i-1;j>i;j--)
a[j][i]=n++;
}
for(i=0;i<N;i++){
printf("\n\n");
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
}
getch();
}
好东西给你分享一下吧!!