#include<iostream>
using namespace std;
int main()
{
int n;
int i,j,k;
cout<<"请输入幻方阶数:";
cin>>n;
int **a=new int*[n];
for(i=0;i<n;i++)
a[i]=new int[n];
if(n%2==1)//奇数阶
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0;
i=0;
j=n/2;
k=1;
a[i][j]=k;
for(k=2;k<=n*n;k++)
{
i--;
j++;
if(i==n-1&&j==n-1)
{
i++;
a[i][j]=k;
break;
}
if(i<0)
i=n-1;
if(j>n-1)
j=0;
if(a[i][j]==0)
a[i][j]=k;
else
{
i++;
if(i>n-1)
i=0;
j--;
if(j<0)
j=n-1;
i++;
if(i>n-1)
i=0;
a[i][j]=k;
}
}
}
else if(n%4==0)//双偶数阶
{
int nn=(n+1)/4;//一共有nn*nn个4方格
int ii,jj;
k=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=k++;
k=n*n+1;