#include<stdio.h>
int main()
{
int a[10][10];
int n=0,i=0,j=0;
int num=1,flag=1;
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=-1;
}
}
while(num<n*n)
{
if(a[i][j]==-1)
{
a[i][j]=num;
num++;
}
if(flag==1)
{
j++;
if(j==n||a[i][j]!=-1)
{
j--;
flag=2;
}
}
else if(flag==2)
{
i++;
if(i==n||a[i][j]!=-1)
{
i--;
flag=3;
}
}
else if(flag==3)
{
j--;
if(j==-1||a[i][j]!=-1)
{
j++;
flag=4;
}
}
else if(flag==4)
{
i--;
if(i==-1||a[i][j]!=-1)
{
i++;
flag=1;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%2d",a[i][j]);
}
printf("\n");
}
return 0;
}
#include<stdio.h>
int main()
{
int i,j,t=1;
int a[7][7];
int n=7;
for (i = 0; i < n/2; i++)
{//最外层控制圈数
for (j = i; j < n-1-i; j++)
{//上方
a[i][j]=t++;
}
for (j = i; j < n-1-i; j++)
{//右侧
a[j][n-1-i]=t++;
}
for (j = n-1-i; j>i; j--)
{//下方
a[n-1-i][j]=t++;
}
for (j = n-1-i; j>i; j--)
{//左侧
a[j][i]=t++;
}
}
if(n%2==1)
{//n是奇数时,解决最中心数字未赋值问题
a[n/2][n/2]=n*n;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%3d",a[i][j]);
}
putchar('\n');
}
return 0;
}
供参考:C语言 经典题目螺旋矩阵(https://www.jb51.net/article/98966.htm)