//魔術方陣
//給定n*n方陣, 填入1~n*n, 使行列斜對角和皆相等
//方法
//自第一列中間項為起點
//往左上填,若重複,自重複格往下一格為新起點
//重複此步驟直至填完
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int n;
int arr[100][100];
while(cin >> n)
{
//n為偶數不存在魔術方陣
while(n%2 == 0)
{
cout << "error!" << endl;
cin >> n;
}
for(int i = 1, row = n*n, col = n*n + n/2; i<=n*n; i++, row--, col--)
{
arr[row%n][col%n] = i;
if(i%n == 0)
{
row+=2;
col++;
}
}
for(int i = 0; i<n; i++)
{
for(int j = 0; j<n; j++)
cout << setw(log10(n*n)+2) << arr[i][j];
cout << endl;
}
}
return 0;
}
留言列表