给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 20
目录
#include<stdio.h>
#define s 20
int main()
{
int i=1,j=0,n=0,flag=0;
int up=1,left=1;
scanf("n=%d",&n);
int right=n,down=n;
int JvZhen[s][s]={0};
do
{
//up行,从左至右赋值
for(i,j=left-1;j<=right-1;i++,j++)
{
JvZhen[up-1][j]=i;
flag=1;
}
if(flag==1)
up++;//进入循环才执行
if(i>n*n)
break;
//right列,从上至下赋值
for(i,j=up-1;j<=down-1;i++,j++)
{
JvZhen[j][right-1]=i;
flag=2;
}
if(flag==2)
right--;
if(i>n*n)
break;
//down行,从右至左赋值
for(i,j=right-1;j>=left-1;i++,j--)
{
JvZhen[down-1][j]=i;
flag=3;
}
if(flag==3)
down--;
if(i>n*n)
break;
//left行,从下至上赋值
for(i,j=down-1;j>=up-1;i++,j--)
{
JvZhen[j][left-1]=i;
flag=4;
}
if(flag==4)
left++;
if(i>n*n)
break;
}while(1);
printf("[");
for(i=0;i<n;i++)
{
printf("[");
for(j=0;j<n;j++)
{
printf("%d",JvZhen[i][j]);
if(j<n-1)
printf(",");
}
printf("]");
if(i<n-1)
printf(",");
}
printf("]");
return 0;
}
简单修改
#include<stdio.h>
#define s 20
int main()
{
int i=1,j=0,n=0;
int up=1,left=1;
scanf("n=%d",&n);
int right=n,down=n;
int JvZhen[s][s]={0};
while(i<=n*n)
{
//up行,从左至右赋值
for(j=left-1;j<=right-1;j++)
JvZhen[up-1][j]=i++;
up++;
//right列,从上至下赋值
for(j=up-1;j<=down-1;j++)
JvZhen[j][right-1]=i++;
right--;
//down行,从右至左赋值
for(j=right-1;j>=left-1;j--)
JvZhen[down-1][j]=i++;
down--;
//left行,从下至上赋值
for(j=down-1;j>=up-1;j--)
JvZhen[j][left-1]=i++;
left++;
}
printf("[");
for(i=0;i<n;i++)
{
printf("[");
for(j=0;j<n;j++)
{
printf("%d",JvZhen[i][j]);
if(j<n-1)
printf(",");
}
printf("]");
if(i<n-1)
printf(",");
}
printf("]");
return 0;
}