//魔術方陣
//給定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;
}

arrow
arrow
    全站熱搜

    大神(偽) 發表在 痞客邦 留言(0) 人氣()