题目
题意不难理解,即以此方式将数填入数组。观察后发现填入数的方式涉及到了x,y轴的移动,即上下左右。则考虑使用二维数组模拟平面,并再用两个一维数组模拟移动的方式。
相关代码如下
#include <stdio.h>
int main(void)
{
int n,i,j;
int arr[100][100]={0};
int dy[]={0,1,0,-1}; //y轴上的移动
int dx[]={1,0,-1,0}; //x轴上的移动 x轴y轴的移动一一对应
scanf("%d",&n);
int d=0,x=1,y=1,a=1,b=1; //最初的数从(1,1)开始,且最初右移,则将相应变量设为初始值
for(i=1;i<=n*n;i++)
{
arr[y][x]=i; //将数填入
b=y+dy[d];
a=x+dx[d];
if(b<1||b>n||a<1||a>n||arr[b][a]) //越界判断
{
d=(d+1)%4; //改变移动方向
b=y+dy[d];
a=x+dx[d];
}
y=b; //移动到的位置
x=a;
}
for(i=1;i<=n;i++) //打印
{
for(j=1;j<=n;j++)
{
if(arr[i][j]<10)
printf(" %d",arr[i][j]);
if(arr[i][j]>=10)
printf(" %d",arr[i][j]);
}
printf("\n");
}
return 0;
}