最終講 卒業研究と卒業試験
最終話 問題18(最終問題)解答例
Public Class Form1
Dim a(2, 2), x(8), y(8), s As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
s = 0
h()
f(0)
DataGridView1.Rows.Add() '1行追加
DataGridView1(3, 4 * s).Value = s.ToString
End Sub
Sub h()
For i = 0 To 8
x(i) = i Mod 3
y(i) = Int(i / 3)
Next
End Sub
Sub f(ByVal g As Integer)
Dim h, w As Integer
For i = 0 To 8
a(y(g), x(g)) = i + 1
'数字の重複チェック
h = 1
If g > 0 Then
For j = 0 To g - 1
If a(y(g), x(g)) = a(y(j), x(j)) Then
h = 0
Exit For
End If
Next
End If
'行の合計チェック
If h = 1 Then
If x(g) = 2 Then
w = 0
For j = 0 To 2
w = w + a(y(g), j)
Next
If w <> 15 Then h = 0
End If
End If
'列の合計チェック
If h = 1 Then
If y(g) = 2 Then
w = 0
For j = 0 To 2
w = w + a(j, x(g))
Next
If w <> 15 Then h = 0
End If
End If
'逆対角線の合計チェック
If h = 1 Then
If y(g) = 2 And x(g) = 0 Then
w = 0
For j = 0 To 2
w = w + a(j, 2 - j)
Next
If w <> 15 Then h = 0
End If
End If
'対角線の合計チェック
If h = 1 Then
If y(g) = 2 And x(g) = 2 Then
w = 0
For j = 0 To 2
w = w + a(j, j)
Next
If w <> 15 Then h = 0
End If
End If
'g+1の世界へ進むか、完成魔方陣の表示
If h = 1 Then
If g + 1 < 9 Then
f(g + 1)
Else
For j = 0 To 2
DataGridView1.Rows.Add() '1行追加
For k = 0 To 2
DataGridView1(k, 4 * s + j).Value = a(j, k).ToString
Next
Next
s = s + 1
DataGridView1.Rows.Add() '1行追加
End If
End If
Next
End Sub
End Class
すべての問題をクリアされた方、卒業です。
ご卒業おめでとうございます。
長らくお付き合いいただきありがとうございました。
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
数学研究室に戻る