#include<bits/stdc++.h>
using namespace std;
int a[105][105];
int main()
{
int n;
cin>>n;//输入n
int ans=2*n-1;//确定二维数组的行数和列数
int x=1;//x为当前元素值的行号
int y=n;//y为当前元素值的列号
a[x][y]=1;//将1填到第一行的中间列
for(int k=2;k<=ans*ans;k++)//枚举2-ans*ans的值
{
if(x==1&&y!=ans)//如果当前元素在第一行不在最后一列
{
x=ans;
y=y+1;
}
else if(x!=1&&y==ans)//如果当前元素在最后一列不在第一行
{
x=x-1;
y=1;
}
else if(x==1&&y==ans)//如果当前元素在第一行并且在最后一列
{
x=x+1;
}
else if(x!=1&&y!=ans)//如果当前元素不在第一行并且不在第一列
{
if(a[x-1][y+1]==0)//如果该元素的右上方没有数
{
x=x-1;
y=y+1;
}
else//如果该元素的右上方有数
x=x+1;
}
a[x][y]=k;//将此时的k赋值给x行y列
}
for(int i=1;i<=ans;i++)//打印二维数组中的元素
{
for(int j=1;j<=ans;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
openjudge 1.8.22 神奇的幻方
最新推荐文章于 2023-12-28 15:24:47 发布