2014-01-12 3 views
0

я получил массив полукокса и хочет создать перестановку с особым условиемузнать перестановку строк Vb сети

, например, если я вход 2, то он будет генерировать перестановки 2 символа массив символов содержит 6 элементов как этот inChars = {c,f,a,b,m,p)

, когда я запустить его с

3 ввода символов, он генерирует, перестановка f,a,b

4 символа ->f,a,b,m

мой первый вопрос почему она начинается со 2-го элемента массива (е) вместо (с)

и мой 2-й вопросы, как создать что-то вроде этого: когда я ввод 3 символа, он будет генерировать 2 и 3 подмножество полукокса вместо только 3 подмножества, это будет как

c,f

c-a

....

c,f,a

c,a,m

.....

вот скриншот

enter image description here

вот код

Public Class permute 
Dim ItemUsed() As Boolean 
Dim pno As Long, pString As String 
Dim inChars() As Char = {"c", "f", "a", "b", "m", "p"} 

Private Sub permute_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
End Sub 

Sub Permute(ByVal K As Long) 
    ReDim ItemUsed(K) 
    pno = 0 
    Permutate(K, 1) 
    tb.Text = K 
End Sub 

Private Sub Permutate(ByVal K As Long, ByVal pLevel As Long) 
    Dim i As Long, Perm As String 
    Perm = pString 

    For i = 1 To K 
     If Not ItemUsed(i) Then 
      If pLevel = 1 Then 
       pString = inChars(i) 
      Else 
       pString += inChars(i) 
      End If 
      If pLevel = K Then 
       pno = pno + 1 
       Results.Text += _ 
       pno & " " & " = " & " " & pString & vbCrLf 
       Exit Sub 
      End If 

      ItemUsed(i) = True 
      Permutate(K, pLevel + 1) 
      ItemUsed(i) = False 
      pString = Perm 
     End If 
    Next 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Permute(tb.Text) 
End Sub 

Private Sub tb_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tb.TextChanged 
    If tb.Text = "" Then 
     Results.Text = "" 
    Else 
     Permute(tb.Text) 
    End If 
End Sub 
End Class 
+0

хорошо, но где код? Трудно сказать, что не так, когда вы не показываете код ... – MarcinJuraszek

+0

жаль, что я забыл, что обновил код –

ответ

2

Измените свой For цикл, чтобы начать с 0 к K-1:

For i = 0 To K - 1 

Update - второй вопрос

Sub Permute(ByVal K As Long) 
    results = New List(Of String) 
    ReDim ItemUsed(K) 
    pno = 0 

    Dim i As Integer 
    For i = 2 To K 
     Permutate(i, 1) 
    Next 
End Sub 
+0

thx @MarcinJuraszek это сработало. если я могу спросить еще раз, как сгенерировать 2 & 3 подмножества, если вход 3, тогда 2,3,4 подмножество, если вход 4 и так далее? –

+0

Я обновил свой ответ. Самый простой способ - просто называть 'Permutate' несколько раз с' K' от '2' до вашей длины. – MarcinJuraszek

+0

спасибо, ваш ответ очень полезен: thumbsup: –

Смежные вопросы