首先介绍一下奇数幻方的设计算法
此题要求输入一个数,然后打印出奇数阶魔方阵。要打印出奇数阶魔方阵,首先要明白奇数阶魔方阵的生成方法。其生成方法如下:
(1) 1的位置在第一行正中;
(2) 新位置应当处于最近一个插入位置右上方,但如右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置,如超出右边界则新位置取应选行的最左一个位置;
(3) 若最近一个插入元素为N的整倍数,则选下面一行同列上的位置为新位置。
#include<iostream>
#include<iomanip>
#include<vector>
using namespace std;
int main()
{
int n;
int a[100][100];
while(cin>>n)
{
int i,j,k;
for(i=0,j=n/2,k=1;k<=n*n;)
{
if((k%n)!=0)
{
if(i<0)
i=n-1;
if(j>=n)
j=0;
a[i][j]=k;
i--;
j++;
k++;
}
else
{
if(i<0)
i=n-1;
if(j>=n)
j=0;
a[i][j]=k;
i++;
k++;
}
}
for(int x=0;x<n;x++)
for(int y=0;y<n;y++)
{
cout<<setw(3)<<a[x][y];
if(y==n-1)
cout<<endl;
}
}
return 0;
}