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


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

【演習】
課題1
説明したアルゴリズムで作成できる魔方陣の条件を調べて下さい。
6方陣や10方陣や14方陣は作成できるのでしょうか?。
課題2
説明したアルゴリズムで作成出来ない場合、解は無いのでしょうか?。

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

※・