Je cherche un algorithme, qui donne toute les combinaisons possibles avec (n) éléments, avec répétitions des caractères. L'algorithme doit trier les doubles évidement.
J'ai adapté cet algorithme en VB Express 2010, cela fonctionne, mais il n'y a pas la répétition des caractères
Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 Dim tablo_origine() As String Dim tablo_test() As Boolean Dim tablo_resultat() As String ////////////////////////////////////////////////////////////////////////////////////////////// Private Sub Button1_Click Dim i As Integer Dim nElements As Integer 'dimensionnement du tableau d'origine et remplissage ReDim tablo_origine(2) 'Alimente les éléments du tableau tablo_origine(0) = "a" tablo_origine(1) = "b" tablo_origine(2) = "c" nElements = UBound(tablo_origine) ReDim tablo_test(nElements) ReDim tablo_resultat(0) 'lancement de la procédure récursive test(0) End Sub ////////////////////////////////////////////////////////////////////////////////////////////////////// Sub test(ByVal n As Integer) Dim i As Integer, i1 As Integer Dim s As String For i = 0 To UBound(tablo_origine) 'si valeur non sélectionnée If tablo_test(i) = False Then tablo_resultat(n) = tablo_origine(i) 'si on a parcourru tout le tableau d'origine If n = UBound(tablo_origine) Then 'on construit la chaine d'affichage s = "" For i1 = 0 To n s = s & tablo_resultat(i1) Next 'remplissage ListBox ListBox1.Items.Add(s) 'sinon, on relance la procédure récursive Else 'on coche la valeur déjà choisie tablo_test(i) = True 'on prépare le tableau résultat ReDim Preserve tablo_resultat(n + 1) 'on relance la procédure test(UBound(tablo_resultat)) 'on rétablit le tableau résultat d'avant ReDim Preserve tablo_resultat(n) 'on décoche la valeur déjà choisie tablo_test(i) = False End If End If Next End Sub /////////////////////////////////////////////////////////////////////////
Ce qui donne comme résultat: abc, acb, bac, bca, cab, cba.
Alors que je voudrais aussi, aab, aac, bba ,bbc, cca, ccb.
Merci![]()
Partager