最終講 卒業研究と卒業試験

最終話 問題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

すべての問題をクリアされた方、卒業です。
ご卒業おめでとうございます。

長らくお付き合いいただきありがとうございました。

卒業された方はVB講義にも挑戦しましょう。

第7話へ 

006

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座

数学研究室に戻る