以下の解説、解法が間違っていても責任は取れません
発見した場合はコメント欄よりご指摘下さい
--------------------------------------------------------------------------------------------------
多分だけどこれをVBAに貼り付けてウォッチ式の中身を見れば理解できるはず
未だによく理解してない(汗
①最初はInitで11100になる
②10と連続になるポイントが配列の3番目と4番目で、該当した場合は値を入れ替える
③入れ替えたらその時の1の順番3の手前(-1する)と11で連続した場合のカウントを引数にInit
④繰り返し...
よく分からない(;´д`)てか免土井
Private Sub test()
Dim S(5) As String
Dim N As Integer
Dim K As Integer
Dim R As Integer
S(0) = "ダミー"
S(1) = ""
S(2) = ""
S(3) = ""
S(4) = ""
S(5) = ""
N = 5
K = 3
R = init(S, N, K)
While R = 0
R = nextX(S, N)
Wend
End Sub
Private Function init(ByRef S() As String, _
ByVal N As Integer, _
ByVal K As Integer) As Integer
Dim L As Integer
If 1 <= K And K <= N Then
For L = 1 To N Step 1
If L <= K Then
S(L) = 1
Else
S(L) = 0
End If
Next L
init = 0
Else
init = 1
End If
End Function
Private Function nextX(ByRef S() As String, _
ByVal N As Integer) As Integer
Dim C As Integer
Dim L As Integer
Dim R As Integer
C = 0
L = 1
R = -1
While (L < N) And (R = -1)
If S(L) = 1 Then
If S(L + 1) = 0 Then
S(L) = 0
S(L + 1) = 1
Call init(S, L - 1, C)
R = 0
Else
C = C + 1
End If
End If
L = L + 1
Wend
nextX = R
End Function
SLC
11100,3-1,2
11010,
11010,
11010,2-1,1
10110,
10110,
10110,0-1,0
01110,
01110,
01110,4-1,2
01101,
11001,
11001,2-1,1
10101,
10101,
10101,0-1,0
01101,
01101,
01101,3-1,1
01011,
10011,
10011,0-1,0
01011,
01011,
01011,2-1,0
00111,おわり
0 件のコメント:
コメントを投稿