1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| Option Explicit
Private Function permutons(ByVal V As Collection) As Collection
Dim NV As Integer, i As Long, j As Long, k As Long
Dim FV As Variant
Dim NP As Collection, R As Collection, NR As Collection
If V.Count = 1 Then
Set R = New Collection
R.Add New Collection
R.Item(1).Add V.Item(1)
Set permutons = R
Exit Function
End If
Set R = New Collection
NV = V.Count
For i = 1 To NV
FV = V.Item(i)
V.Remove i
Set NP = permutons(V)
For j = 1 To NP.Count
Set NR = New Collection
NR.Add FV
For k = 1 To NP(j).Count
NR.Add NP(j).Item(k)
Next k
R.Add NR
Next j
If i > V.Count Then V.Add FV Else V.Add FV, , i
Next i
Set permutons = R
End Function
Private Sub Command1_Click()
Dim permutations As Collection, perm As Collection, V As Collection, NV As Integer, i As Long, j As Long
Dim pt As String, txt As String, toto As String
Do While Val(toto) = 0 Or Val(toto) > 9
toto = InputBox("sur combien dxe chiffres ? (de 1 à 9 ?)")
Loop
NV = CInt(toto)
'MsgBox NV
Set V = New Collection
textbox1.Text = "je travaille..."
DoEvents
textbox1.Visible = False
textbox1.Text = ""
For i = 1 To NV
V.Add i
Next i
Set permutations = permutons(V)
For i = 1 To permutations.Count
pt = ""
Set perm = permutations(i)
For j = 1 To perm.Count
pt = pt & perm.Item(j)
Next j
textbox1.SelText = pt & vbCrLf
Next i
textbox1.Visible = True
End Sub |
Partager