第10講 プロシージャの再帰的使用による魔方陣の自動生成
第2話 n次方陣自動生成ソフト
実行画面が
これはすべてのn次方陣を求めるソフトです。
何次の方陣を発生させるのかをnに入力し
エンターするとn次方陣がすべて生成されます。
n=2
1 2
3 4
1 2
4 3
1 3
2 4
1 3
4 2
1 4
2 3
1 4
3 2
2 1
3 4
2 1
4 3
2 3
1 4
2 3
4 1
2 4
1 3
2 4
3 1
3 1
2 4
3 1
4 2
3 2
1 4
3 2
4 1
3 4
1 2
3 4
2 1
4 1
2 3
4 1
3 2
4 2
1 3
4 2
3 1
4 3
1 2
4 3
2 1
生成された2次方陣は24個です。
をなるソフトコード例
Module Module1
Dim cn, x(25), n As Integer
Sub Main() '私は社長だ。
Console.WriteLine("これはすべてのn次方陣を求めるソフトです。")
Console.WriteLine("何次の方陣を発生させるのかをnに入力し")
Console.WriteLine("エンターするとn次方陣がすべて生成されます。")
Console.Write("n=")
n = Console.ReadLine()
cn = 0
f (0)
Console.WriteLine("生成された{0:d}次方陣は{1:d}個です。", n, cn)
End Sub
Sub f(g As Integer)
Dim i, j, k, h As Integer
For i = 0 To n * n - 1
If g = 0 Then x(g) = i + 1
h = 1
If g > 0 Then
For j = 0 To g - 1
If x(j) = i + 1 Then
h = 0
Exit For
End If
Next
If h = 1 Then x(g) = i + 1
End If
If h = 1 Then
If g + 1 < n * n Then
f (g + 1)
Else
cn += 1
For j = 0 To n - 1
For k = 0 To n - 1
Console.Write("{0:d} ", x(n * j + k))
Next
Console.WriteLine()
Next
Console.WriteLine()
End If
End If
Next
End Sub
End Module
さて、さてこのn次方陣生成ソフトを、
段階を踏んでn次魔方陣生成ソフトに近づけていきます。
まず、行(横)合計が一致する方陣を准准魔方陣と名付けて、
准准魔方陣を生成しましょう。
n次魔方陣では横合計・縦合計・対角線は
n×(n×n+1)÷2になることをヒントとしておきます。
どうしてかと申しますと、
1+2+3+・・・+n×n=n×n×(n×n+1)÷2
であり、それを行数のnで割るからです。
1+2+3+・・・+n×nの答えがn×n×(n×n+1)÷2となる理由は、
1 + 2 + 3 + ・・・ + n×n を逆順に並べたものを考え
n×n+(n×n−1)+(n×n−2)+ ・・・ + 1
両者を加えれば、n×n×(n×n+1)ですよね。
これは求める和の2倍ですから、
最後2で割れば求める和になるのです。
3次以上ではより条件の厳しい魔方陣でさえ存在しますので、
准准魔方陣の存在は自明ですが、
はたして2次の准准魔方陣は存在するのでしょうか。
第1話へ 第3話へ
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc** c言語 c** 入門 初心者 基礎から応用まで
eclipse c** 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C**入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC**による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ