Hallo,
ich möchte per Makro alle möglichen Kombinationen von n aus k, bei denen die Quersumme aller Kombinationen = k ist, in ein Array schreiben.
Gelöst habe ich das erstmal so:
n=14
For a1 = 0 To k
For a2 = 0 To k - a1
For a3 = 0 To k - a1 - a2
For a4 = 0 To k - a1 - a2 - a3
For a5 = 0 To k - a1 - a2 - a3 - a4
For a6 = 0 To k - a1 - a2 - a3 - a4 - a5
For a7 = 0 To k - a1 - a2 - a3 - a4 - a5 - a6
For a8 = 0 To k - a1 - a2 - a3 - a4 - a5 - a6 - a7
For a9 = 0 To k - a1 - a2 - a3 - a4 - a5 - a6 - a7 - a8
For a10 = 0 To k - a1 - a2 - a3 - a4 - a5 - a6 - a7 - a8 - a9
For a11 = 0 To k - a1 - a2 - a3 - a4 - a5 - a6 - a7 - a8 - a9 - a10
For a12 = 0 To k - a1 - a2 - a3 - a4 - a5 - a6 - a7 - a8 - a9 - a10 - a11
For a13 = 0 To k - a1 - a2 - a3 - a4 - a5 - a6 - a7 - a8 - a9 - a10 - a11 - a12
For a14 = 0 To k - a1 - a2 - a3 - a4 - a5 - a6 - a7 - a8 - a9 - a10 - a11 - a12 - a13
If a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13 + a14 = k Then
AComb(n, 0) = a1
AComb(n, 1) = a2
AComb(n, 2) = a3
AComb(n, 3) = a4
AComb(n, 4) = a5
AComb(n, 5) = a6
AComb(n, 6) = a7
AComb(n, 7) = a8
AComb(n, 8) = a9
AComb(n, 9) = a10
AComb(n, 10) = a11
AComb(n, 11) = a12
AComb(n, 12) = a13
AComb(n, 13) = a14
n = n + 1
End If
x = x + 1
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Das funktioniert soweit, nur wenn sich n ändert muss ich den Code editieren und die Anzahl der Schleifen und Variablen ändern. Ich könnte den Code zwar mit einer Funktion automatisch schreiben, aber eine elegantere Lösung wäre mir lieber (z.B. rekursiv).
Hat jemand eine Idee wie man das schneller oder flexibler gestalten kann?
|