输出n阶“魔方阵”。/*n为1~15之间的奇数*/ (注意边界部分)
特点:每一行、列、对角线之和相等。
确定每个数位置的原则是:
(1)第一个数(1)为第0行中间位置;
(2)若当前为右上角位置,则下一数放在其下方;
(3)否则放在减1行加1列位置;
(4)若所在位置已经有数,则退回到原数下方位置。
int main()
{
while(true)
{
int num[15][15]={0},n;
int i,j;
cout<<"请输入一个 1-15 之间的奇数 : ";
cin>>n;
i=0;j=n/2;
num[i][j]=1;
for(int k=2;k<=n*n;k++)
{
if(i==0 && j==n-1)
{
i+=1;
}
else
{
int ti=i,tj=j;
i=(i-1+n)%n;
j=(j+1)%n;
if(num[i][j]!=0)
{
i=(ti+1)%n;
j=tj;
}
}
num[i][j]=k;
}
//输出
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<setw(3)<<num[i][j]<<" ";
}
cout<<endl<<endl;
}
}
return 0;
}