#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int arr[101][101];
int a=0,b=0,e=2,s=1;
int g=n-2;
arr[a][b]=1;
if(n>2)
{
if(n%2!=0)
{
for(int c=1;c<n-1;)
{
arr[a][b+=1]=e;
e++;
for(int d=1;d<=c;d++)
{
arr[a+=1][b-=1]=e;
e++;
}
c++;
arr[a+=1][b]=e;
e++;
for(int q=1;q<=c;q++)
{
arr[a-=1][b+=1]=e;
e++;
}
c++;
}
arr[a+=1][b]=e;
e++;
for(int f=1;f<=n-2;f++)
{
arr[a+=1][b-=1]=e;
e++;
}
g-=1;
arr[a][b+=1]=e;
e++;
for(;g>0;)
{
for(int h=1;h<=g;h++)
{
arr[a-=1][b+=1]=e;
e++;
}
g--;
arr[a+=1][b]=e;
e++;
for(int l=1;l<=g;l++)
{
arr[a+=1][b-=1]=e;
e++;
}
g--;
arr[a][b+=1]=e;
e++;
}
}
else
{
int r=2;
for(;s<=n-2;)
{
arr[a][b+=1]=r;
r++;
for(int t=1;t<=s;t++)
{
arr[a+=1][b-=1]=r;
r++;
}
s++;
arr[a+=1][b]=r;
r++;
for(int u=1;u<=s;u++)
{
arr[a-=1][b+=1]=r;
r++;
}
s++;
}
arr[a][b+=1]=r;
r++;
for(int v=1;v<=n-1;v++)
{
arr[a+=1][b-=1]=r;
r++;
}
arr[a][b+=1]=r;
r++;
for(int w=n-2;w>=1;)
{
for(int x=1;x<=w;x++)
{
arr[a-=1][b+=1]=r;
r++;
}
w--;
arr[a+=1][b]=r;
r++;
for(int y=1;y<=w;y++)
{
arr[a+=1][b-=1]=r;
r++;
}
w--;
arr[a][b+=1]=r;
r++;
}
}
for(int m=0;m<n;m++)
{
for(int p=0;p<n;p++)
{
if(p>0||p<=n-1)
printf(" ");
printf("%d",arr[m][p]);
if(p==n-1)
printf("\n");
}
}
}
else
{
switch(n)
{
case 1:printf("1");break;
case 2:printf("1 2\n3 4");break;
}
}
return 0;
}
蛇形填充数组(将数字从小到大填入各条斜线,其中编号为奇数的从左下向右上填写,编号为偶数的从右上到左下填写。比如n=4时,方阵填充为如下形式:)
最新推荐文章于 2023-09-16 11:12:38 发布