奇数の魔方陣を作成する

  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, ...などの奇数の魔方陣を作成します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして Houjin.java の名前で保存して下さい。
        //★ 5*5の魔方陣  前田 稔
        class Houjin
        {   public static void main(String[] args)
            {   int     t[][] = new int[5][5];
                int     n,x,y,xw,yw;
    
                y= 4;
                x= 2;
                for(n=1; n<26; n++)
                {   t[y][x]= n;
                    yw= (y+1)%5;
                    xw= (x+1)%5;
                    if (t[yw][xw]!=0)
                    {   yw= (y+4)%5;
                        xw= x;
                    }
                    y= yw;
                    x= xw;
                }
                for(y=0; y<5; y++)
                {   for(x=0; x<5; x++)
                    if (t[y][x]>9)  System.out.print(t[y][x] + "  ");
                    else            System.out.print(" " + t[y][x] + "  ");
                    System.out.println("");
                }
            }
        }
        
  2. Houjin.java をコンパイルして Houjin.class を作成して下さい。
    class オブジェクトを実行して下さい。
    コンパイルの詳細は Java を動かす を参照して下さい。
  3. ページ先頭の画面が表示されたら完成です。

プログラムの説明

魔方陣とは1〜Nまでの数字を「縦、横、斜めの合計がいずれも等しくなる」ように並べた行列です。
3*3の魔方陣は1〜9の数を縦、横、斜めの合計が15になるように並べます。
5*5の魔方陣は1〜25の数を縦、横、斜めの合計が65になるように並べます。

5*5の魔方陣を計算する二次元配列を定義して、配列[y][x] にアルゴリズムに従って値を格納します。
{   int     t[][] = new int[5][5];
    int     n,x,y;

    t[y][x]= n;


魔方陣のアルゴリズム

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

【演習】

課題

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

超初心者のプログラム入門(Java2)