首先,你要有一个大体的思路,回旋矩阵的构建方法,简单点的就是一圈一圈的绕,然后你再找找规律,然后就是个小陷阱,就是到最后一圈的宽度等于2和等于的情况考虑.我因为是新手,所以写的代码比较弱智,但是这样应该更容易理解吧?
贴上代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int a[100][100];
int N;
void prepare(int x,int y,int range,int num)
{
int s_x=x;
int s_y=y;
int i;
for(i=1;i<range;i++)
{
a[x][y++]=num++;
}
for(i=1;i<range;i++)
{
a[x++][y]=num++;
}
for(i=1;i<range;i++)
{
a[x][y--]=num++;
}
for(i=1;i<range;i++)
{
a[x--][y]=num++;
}
if(range==3)
{
a[s_x+1][s_y+1]=N*N;
}
if(range<3)
{
return;
}
prepare(s_x+1,s_y+1,range-2,num);
}
int main()
{
scanf("%d",&N);
int num=1;
prepare(1,1,N,1);
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}