2017-12-01 13 views
0

Ich möchte berechnen, wie viele verschiedene Variationen einer bestimmten Anzahl von Zahlen möglich sind. Die Anzahl der Elemente ist variabel.Berechnen Sie die Anzahl der Kombinationen mit Bedingungen

Beispiel: Ich habe 5 Elemente und jedes Element kann zwischen 0 und 8 variieren. Nur das erste Element ist ein wenig definierter und kann nur zwischen 1 und 8 variieren. Bisher würde ich sagen, ich habe 8 * 9^4 Möglichkeiten. Aber ich habe noch mehr Bedingungen. Sobald eines der Elemente Null wird, sollten die nächsten Elemente automatisch ebenfalls Null sein.

Beispiel:

6 5 4 7 8 ist ok

3 6 7 0 5 nicht ok ist, und drehen würde zu 3 6 7 0 0

Würde jemand mir zeigen, wie man die Menge der Kombinationen für diesen Fall und auch im Allgemeinen berechnet, weil ich es in der Lage sein würde, es auch für 4 oder 8 oder 9 usw. Elemente zu berechnen. Später möchte ich diese Zahl in VBA berechnen, um dem Benutzer eine Prognose zu geben, wie lange meine Berechnungen dauern werden.

+1

Dies ist eine reine mathematische Frage, keine programmatische! Und Sie wissen auch, wie man den ersten Wert unterscheidet; Wie würdest du für die nächsten gehen? –

+0

Ja, aber das gilt für alle Positionen außer der ersten. Das heißt 3 0 6 5 4 ist auch nicht gültig. Ich dachte, das erste Element ist für die Berechnung nicht wichtig, weil es sowieso nicht null sein kann. Also wenn ich 8 * 9^4 - 9^3 -9^2 -9 mache, sollte ich die Möglichkeiten haben. Aber das scheint viel zu viel zu sein. Ich habe den Fall mit 5 Elementen in VBA codiert und einen Zähler implementiert, und ich bekomme 37448. – Shalloon84

+0

Sagen Sie, Sie haben bereits ein VBA-Programm, um die Zahl zu berechnen, oder wollen Sie Hilfe bei der Erstellung eines solchen Programms? Oder sagst du, du kannst es jetzt in VBA rohe Gewalt anwenden und willst eine effizientere Routine? Oder etwas anderes? –

Antwort

1

einmal Da eine 0 in der Sequenz vorhanden ist, werden alle restlichen Zahlen in der Folge auch 0 sein wird, sind diese alle Möglichkeiten: (wobei # unten eine beliebige Ziffer 1-8 darstellt):

##### (accounts for 8^5 combinations) 
####0 (accounts for 8^4 combinations) 
... 
#0000 (accounts for 8^1 combinations) 

Daher ist die Antwort (in Pseudo-Code):

int sum = 0; 

for (int x = 1; x <= 5; x++) 
{ 
    sum = sum + 8^x; 
} 

oder äquivalent

int prod = 0; 

for (int x = 1; x <= 5; x++) 
{ 
    prod = 8*(prod+1); 
} 
0

großen dankeschön.

Sub test() 
Dim sum As Single 

Dim x As Integer 
For x = 1 To 6 
    sum = sum + 8^x 
Next 
Debug.Print sum 
End Sub 

Mit diesem Code bekomme ich genau 37488. Ich habe auch versucht, mit z.B. 6 Elemente und es hat auch funktioniert. Jetzt kann ich versuchen, die Rechenzeit zu schätzen

+1

So akzeptieren Sie keine Antwort. Bitte setzen Sie ein Häkchen neben meine Antwort. – ImaginaryHuman072889

+1

Ich stimme @Imaginary zu, außer zu sagen, dass Selbstantworten willkommen sind, solange sie eine endgültige Lösung darstellen und kein Zwischenbericht. – halfer

Verwandte Themen