偶数の魔方陣を作成する

   64    2    3   61   60    6    7   57 
    9   55   54   12   13   51   50   16 
   17   47   46   20   21   43   42   24 
   40   26   27   37   36   30   31   33 
   32   34   35   29   28   38   39   25 
   41   23   22   44   45   19   18   48 
   49   15   14   52   53   11   10   56 
    8   58   59    5    4   62   63    1 

魔方陣とは1~Nまでの数字を「縦、横、斜めの合計がいずれも等しくなる」ように並べた行列です。
4*4の魔方陣は1~16の数を縦、横、斜めの合計が34になるように並べます。
8*8の魔方陣は1~64の数を縦、横、斜めの合計が260になるように並べます。

4,8,16, ...などの偶数の魔方陣を作成します。

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

魔方陣のアルゴリズム

4*4の魔方陣は以下の方法で作成することができます。
  1. 4×4のマスに1~16の数を格納します。
  2. その下に16~1の数を格納します。
  3. マスの対角要素には下の段の、それ以外は上の段の数字を選択します。
  4. 対角要素とは対角線上の[0,0][1,1][2,2][3,3][0,3][1,2][2,1][3,0]のことで○印が付いています。
  5. 8*8や16*16のときの対角要素の判定は4*4を組み合わせて下さい。
    例えば[0,3][1,2] だけで無く [0,4][1,5][3,7][4,0]なども対角要素に加えます。

【ヒント】

  1. 二次元配列の定義です。
    t の名前で、4行4列の配列を定義しています。
    static int[,] t = new int[4, 4];
  2. 配列 t をゼロクリアしてみます。
        for(y=0; y<4; y++)
            for(x=0; x<4; x++)
                t[y,x]= 0;
        
  3. 配列 t の値を4桁右詰めで表示します。
    Console.Write(" {0,4}", t[y,x]);

【演習】

課題1

説明したアルゴリズムで作成できる魔方陣の条件を調べて下さい。
6方陣や10方陣や14方陣は作成できるのでしょうか?。

課題2

説明したアルゴリズムで作成出来ない場合、解は無いのでしょうか?。

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