Hi,
dabei handelt es sich um einen Algorithmus zur Auflistung aller möglichen Kombinationen von n Elementen aus k möglichen Elementen (mit Wiederholung).
(war aber eigentlich der Ansicht es wäre k aus n, aber egal)
Ich habe mal ein paar Kommentare hinzugefügt:
i = 1 'ohne funktionelle bedeutung
For j = 1 To n 'zeile 1 bis n auf 1 setzen
Cells(1, j) = 1
Next
kombinationszahl = k ^ n
For i = 2 To kombinationszahl
For j = 1 To n
Cells(i, j).Value = Cells(i - 1, j) 'wert der vorherigen zeile eintragen
Next
For j = n To 1 Step -1 'rückwärts zählen, von n auf 1
If Cells(i, j) < k Then 'wenn der index jeder spalte der aktiven zeile kleiner als die anzahl der kombinierbaren elemente (k) ist dann
Cells(i, j) = Cells(i, j) + 1 'index um 1 erhöhen
j = 1 'und die schleife beenden (schleifenvariable=schleifenende (j=1), alternativ exit for)
Else
Cells(i, j) = 1 'wenn n bereits erreicht wurde wieder mit 1 anfangen, z.B.: _
Zeile (i) = Zeile(i-1) = 3 = k, also wird in Zeile (i) eine 1 eingetragen wenn in der darüberliegenden Zeile eine 3 bzw. n steht
End If
Next
Next
Lösungsweg für deine Aufgabe:
hallo n=2, k=3
n Spalten und k^n Zeilen > 2 Spalten und 9 Zeilen
Die erste Zeile enthält immer nur Einsen.
Z1: 1,1
Die zweite Zeile entspricht der Ersten, wenn die letzte Zelle der zweiten Spalte < k=3 ist dann wird um 1 erhöht und mit der nächsten Zeile weitergemacht.
Z2: 1,2
Z3: 1,3
Z4: 1,3
Da die letzte Zelle in Zeile 4 nicht < als k ist wird der Zellenwert nicht erhöht und die zweite Schleife nicht abgebrochen, stattdessen wird der Wert auf 1 gesetzt und der Wert der nächsten Zelle (falls dieser < k ist usw.) um 1 erhöht:
Z4: 2,1
usw...
Gruß
Till
|