奇数の魔方陣を作成する

  11  18  25   2   9 
  10  12  19  21   3 
   4   6  13  20  22 
  23   5   7  14  16 
  17  24   1   8  15 

魔方陣とは1~Nまでの数字を「縦、横、斜めの合計がいずれも等しくなる」ように並べた行列です。
3,5,7, ...などの奇数の魔方陣を作成します。

3*3の魔方陣は1~9の数を縦、横、斜めの合計が15になるように並べます。
5*5の魔方陣は1~25の数を縦、横、斜めの合計が65になるように並べます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

魔方陣のアルゴリズム

奇数の魔方陣(3,5,7,9,11,...)は全て以下の方法で作成することができます。
  1. 下段の中央に1を格納してここからから始めます。
  2. 1の位置から右下に移動します。
    枠の外に出たときは、その位置に対応する枠の中に移動します。
  3. 2の位置から右下に移動します。
    枠の外に出たときは、その位置に対応する枠の中に移動します。
  4. 3の位置の右下には既に1が格納されています。
    そのときは右下ではなくて上に移動します。
  5. これを全ての箱が埋まるまで繰り返すと魔方陣が完成します。

【ヒント】

  1. 二次元配列の定義です。
    t5 の名前で、5行5列の配列を定義します。
    short t5[5][5];
  2. 配列 t をゼロクリアします。
        for(y=0; y<5; y++)
            for(x=0; x<5; x++)
                t5[y][x]= 0;
        
  3. 配列 t の値を4桁右詰めで表示します。
        for(y=0; y<n; y++)
        {    for(x=0; x<n; x++)     printf("%4d",t[y][x]);
             printf("\r\n");
        }
        

【演習】

説明したアルゴリズムで作成できない奇数の魔方陣を調べて下さい。
もし見つかれば懸賞ものかも知れません。

超初心者のプログラム入門(C/C++)