奇数×奇数の魔方陣を得るプログラムは、 学生のための数学 > その他の数学 > 魔方陣 でご紹介したものが一般的ですが、 その他にもあります。
9行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
9で割った商をとる ( ただし、 余りは9までとする ):
5 6 7 8 0 1 2 3 4
6 7 8 0 1 2 3 4 5
7 8 0 1 2 3 4 5 6
8 0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 0
2 3 4 5 6 7 8 0 1
3 4 5 6 7 8 0 1 2
4 5 6 7 8 0 1 2 3
その余り :
2 4 6 8 1 3 5 7 9
3 5 7 9 2 4 6 8 1
4 6 8 1 3 5 7 9 2
5 7 9 2 4 6 8 1 3
6 8 1 3 5 7 9 2 4
7 9 2 4 6 8 1 3 5
8 1 3 5 7 9 2 4 6
9 2 4 6 8 1 3 5 7
1 3 5 7 9 2 4 6 8
5行5列の魔方陣 :
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
商行列 :
3 4 0 1 2
4 0 1 2 3
0 1 2 3 4
1 2 3 4 0
2 3 4 0 1
余り行列 :
2 4 1 3 5
3 5 2 4 1
4 1 3 5 2
5 2 4 1 3
1 3 5 2 4
商行列 と 余り行列 の数字の並び方に法則があります。 この法則性を用いることによって、 十進BASIC で、 9行9列までの奇数行列を得るプログラム作ることができます。
奇数×奇数の魔方陣を求めるプログラムは、 この他にもあります。
5行5列の魔方陣を0行0列からの行列に変更して、 1 から順にその数の存在する住所を書き出しますと、 次のようになります。
1:( 2,3 )
2:( 3,4 )
3:( 4,0 )
4:( 0,1 )
5:( 1,2 )
6:( 1,4 )
7:( 2,0 )
8:( 3,1 )
9:( 4,2 )
10:( 0,3 )
11:( 0,0 )
12:( 1,1 )
13:( 2,2 )
14:( 3,3 )
15:( 4,4 )
16:( 4,1 )
17:( 0,2 )
18:( 1,3 )
19:( 2,4 )
20:( 3,0 )
21:( 3,2 )
22:( 4,3 )
23:( 0,4 )
24:( 1,0 )
25:( 2,1 )
行の順列は、 2 3 4 0 1 1 2 3 ・ ・ ・ ・
列の順列は、 3 4 0 1 2 4 0 1 ・ ・ ・ ・
行の順列の1番目から5番目までは、7.5 から初めて1づつ加えながら、5で割った余りを、小点数以下で切り上げたものになっています。
行の順列の6番目から10番目までは、6.5 から初めて1づつ加えながら、5で割った余りを、小点数以下で切り上げたものになっています。
行の順列11番目から15番目までは、5.5 から初めて1づつ加えながら、5で割った余りを、小点数以下で切り上げたものになっています。
列の順列の1番目から5番目までは、2.5 から初めて1づつ加えながら、5で割った余りを、小点数以下で切り下げたものになっています。
列の順列の6番目から10番目までは、3.5 から初めて1づつ加えながら、5で割った余りを、小点数以下で切り下げたものになっています。
列の順列の11番目から15番目までは、4.5 から初めて1づつ加えながら、5で割った余りを、小点数以下で切り下げたものになっています。
この法則性を用いることにより、 十進BASIC で、 奇数×奇数の魔方陣を得るプログラム作ることができます。
なお、 このプログラムソースは、 Hidekazu Ito さんのホームページ 「 C言語辞典 」
http://chaste.web.fc2.com/index.html よりいただきました。
十進