魔法陣
久しぶりに書棚にあったアルゴリズムについての本を開くと、魔法陣のアルゴリズムが載っていた。
タテヨコ斜めのマスの合計が全て同じになるという魔法陣の事だが、奇数の枠で当てはまるようだ
アルゴリズムを簡単に説明すると、
スタートは1から、先頭行の中心に1が入る
続けて斜め右上に2、3、と続いくのだが、入る数字が枠から外へはみ出した時には見本のように折り返す
入る数字が魔法陣のマス数で割った余りが1であるときは直下へ入る
この法則を適用すれば魔法陣が完成する
奇数魔法陣(N=9)
47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35
アルゴリズムさえわかれば、下記のようなCソースで簡単に計算表示が出来る
コンパイル出来る環境の方は是非お試しあれ
#include
#define N 9
int main (int argc, const char * argv[])
{
int hojin[N+1][N+1];
int i, j, k;
j=(N+1)/2;
i=0;
for (k=1; k <= N*N; k++)
{
if((k % N)==1) i++;
else{
i--;
j++;
}
if(i==0) i=N;
if(j>N) j=1;
hojin[i][j]=k;
}
printf(" 奇数魔法陣(N=%d)\n",N);
for (i=1; i<=N; i++){
for (j=1; j<=N; j++){
printf("%4d ",hojin[i][j]);
}
printf("\n");
}
return 0;
}
感謝の心を込めて・・・
伊東祐三(山梨県 樋口印刷内)
タテヨコ斜めのマスの合計が全て同じになるという魔法陣の事だが、奇数の枠で当てはまるようだ
アルゴリズムを簡単に説明すると、
スタートは1から、先頭行の中心に1が入る
続けて斜め右上に2、3、と続いくのだが、入る数字が枠から外へはみ出した時には見本のように折り返す
入る数字が魔法陣のマス数で割った余りが1であるときは直下へ入る
この法則を適用すれば魔法陣が完成する
奇数魔法陣(N=9)
47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35
アルゴリズムさえわかれば、下記のようなCソースで簡単に計算表示が出来る
コンパイル出来る環境の方は是非お試しあれ
#include
#define N 9
int main (int argc, const char * argv[])
{
int hojin[N+1][N+1];
int i, j, k;
j=(N+1)/2;
i=0;
for (k=1; k <= N*N; k++)
{
if((k % N)==1) i++;
else{
i--;
j++;
}
if(i==0) i=N;
if(j>N) j=1;
hojin[i][j]=k;
}
printf(" 奇数魔法陣(N=%d)\n",N);
for (i=1; i<=N; i++){
for (j=1; j<=N; j++){
printf("%4d ",hojin[i][j]);
}
printf("\n");
}
return 0;
}
感謝の心を込めて・・・
伊東祐三(山梨県 樋口印刷内)
コメント