第8講 多次元ループ=多次元For文の学習

第12話 9次順列を2次元に並べる
mンb
を実現するプログラム例
Private Sub CommandButton1_Click()

  CommandButton2_Click
  f '9順列作成プロシージャ

End Sub
Sub f()

  Dim i As Integer, j As Integer, k As Integer
  Dim l As Integer, m As Integer, n As Integer
  Dim o As Integer, p As Integer, q As Integer
  Dim r As Integer
  Dim cn As Long
  Dim a(9) As Integer
  cn = 0
  For i = 1 To 9
    a(0) = i
    For j = 1 To 9
      If j <> a(0) Then
        a(1) = j
        For k = 1 To 9
          If k <> a(0) And k <> a(1) Then
            a(2) = k
            For l = 1 To 9
              If l <> a(0) And l <> a(1) And l <> a(2) Then
                a(3) = l
                For m = 1 To 9
                  If m <> a(0) And m <> a(1) And m <> a(2) And m <> a(3) Then
                    a(4) = m
                    For n = 1 To 9
                      For o = 0 To 4
                        If n = a(o) Then GoTo tobi1
                      Next
                      a(5) = n
                      For o = 1 To 9
                        For p = 0 To 5
                          If o = a(p) Then GoTo tobi2
                        Next
                        a(6) = o
                        For p = 1 To 9
                          For q = 0 To 6
                            If p = a(q) Then GoTo tobi3
                          Next
                          a(7) = p
                          For q = 1 To 9
                            For r = 0 To 7
                              If q = a(r) Then GoTo tobi4
                            Next
                            a(8) = q
                            Call g(cn, a())
                            cn = cn + 1
tobi4:
                          Next
tobi3:
                        Next
tobi2:
                      Next
tobi1:
                    Next
                  End If
                Next
              End If
            Next
          End If
        Next
      End If
    Next
  Next
  
End Sub

Sub g(cn As Long, a() As Integer)

  Dim i As Integer, s As Integer, am As Integer
  For i = 0 To 8
    s = Int(i / 3)
    am = i Mod 3
    Cells(4 + s + 4 * Int(cn / 5), 1 + am + 4 * (cn Mod 5)) = a(i)
  Next


End Sub
参考ダウンロード添付ファイル

今回は無条件にすべて表示しましたが、
さらに、gを改良して、
3つの行(横)の合計、3つの列(縦)の合計、2つの対角線の合計
がすべて15になるもののみを表示させるように変更して下さい。

a(0) a(1) a(2)
a(3) a(4) a(5)
a(6) a(7) a(8)

と並んでいますから、
a(0)+a(1)+a(2) = 15
a(3)+a(4)+a(5) = 15
a(6)+a(7)+a(8) = 15
a(0)+a(3)+a(6) = 15
a(1)+a(4)+a(7) = 15
a(2)+a(5)+a(8) = 15
a(0)+a(4)+a(8) = 15
a(2)+a(4)+a(6) = 15

の条件を満たすもののみを表示させればよいのです。
mh
※ cn = cn + 1はfからgに移しておかないと上手く動きません。

第11話へ 第13話へ

004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ第2部へ
小学生からエンジニアまでのRuby入門へ
小学生からエンジニアまでのC言語入門 基礎から応用まで
本サイトトップへ