[VB, C#] Möglichkeiten durchlaufen

Maul Wurf

Ensign
Registriert
Jan. 2009
Beiträge
139
Sehr geerte Forummitglieder,
ich bin hier mit einem komplizierten Problem konfrontiert:
In meinem Program erstelle ich ein Array
Dim arr(39, 4) as byte
Jeder der 40 Dimensionen ist mit 5 Zufälligen Zahlen gefüllt,
was 4^39 Möglichkeiten ergeben.
Ich will jede einzelne der Möglichkeiten bestehend aus 40 zahlen in das Array
Dim arr2(39) as byte
einspeichern und dieses an die Funktion CHECK übergeben.

Wie stelle ich das an?

Danke sehr für jegliche Unterstützung :)
 
Dir ist klar, dass 4^39 eine verdammt hohe Zahl ist und so viele Möglichkeiten alleine in ihrer Erzeugung eine Weile brauchen würden?

Übrigens sind das so wie ich das sehe alles andere als 4^39 Möglichkeiten, wenn du 5 Zufallszahlen in 40 verschiedene Kategorien packst. Die Frage wäre dann auch noch, ob nur 5 Zahlen zur Auswahl stehen oder noch mehr. Ständen 5 zur Auswahl wären es so wie ich das sehe eher 5^5^40 (Zahlen^Anzahl der Zahlen^Kategorien), bei mehr wäre die erste 5 entsprechend durch die Anzahl der möglichen Zufallszahlen zu ersetzen.
 
Wie wäre den sowas hinzubekommen?

Ich (amateur) sehe zumindest keine Möglichkeit dies mit einer For-Schleife zu erledigen, oder ?
 
Also wenn du wirklich 40 * 5 zufällig bestimmte Zahlen, wobei diese Zahlen 40 verschiedene sind, wenn ich mich nicht verlesen habe, alle durchrechnen lassen willst, hättest du 40^5^40 Möglichkeiten. Das ist eine so dermaßen große Zahl, dass du ewig lange brauchen müsstest, das alles zu erstellen, schlag dir das also aus dem Kopf.

Prinzipiell müsste man das mit einer Schleife machen können, im Prinzip hat man ja einfach nur 40 verschiedene Zahlen auf 200 Plätzen. Man könnte das so gestalten, dass man mit überall 0 anfängt, dann die letzte immer weiter erhöht bis sie an 40 kommt, dann wird sie auf 0 gesetzt und die davor auf 1 und immer so weiter bis man überall 39 stehen hat. Aber da das wie gesagt 40^200 Möglichkeiten wären kannst du dir das aus dem Kopf schlagen, da der Nutzen vermutlich nicht in Relation zum Zeitaufwand steht. Zumal die Schleife so wie ich mir die gerade Ausmale auch etwa 200-mal verschachtelt sein dürfte.
 
Maul Wurf schrieb:
Sehr geerte Forummitglieder,
ich bin hier mit einem komplizierten Problem konfrontiert:
In meinem Program erstelle ich ein Array
Dim arr(39, 4) as byteDanke sehr für jegliche Unterstützung :)

Hi, ich sehe lediglich hier zweidimensionales Array.

sprich es hat in VB 40 zeilen und 5 spalten (in C# nur 39Zeilen und 4 Spalten)
ich komme also auf 200 werte was recht leicht beherrschen laesst, was deutlich weniger ist als 4^39 ;)

EDIT: Oder habe ich das Problem nicht verstanden?
 
Nun, ich stelle mir das so vor dass es 40 Kisten gibt, jede Kiste kann 5 Farben einnehmen.
Jetzt sollen alle Möglichkeiten durchlaufen werden.
Ich glaube nicht, dass dies 40^5^40 Möglichkeiten wären ;)
Eher 5^40 : 3 Kisten à 5 Farben wäre 5*5*5 also 5^3
 
Zuletzt bearbeitet:
Das Problem war, dass ich bisher nicht verstanden habe, was genau du eigentlich haben willst und so ganz weiß ich es immer noch nicht.
Ok, die 40 "Kisten" waren die ganze Zeit da, bisher habe ich es aber so verstanden, dass in diesen 40 "Kisten" jeweils 5 Zahlen sind, die zufällig bestimmt werden. Dann wäre also auch noch relevant, in welchem Bereich diese Zufallszahlen bestimmt werden, also ob von 0 - 4 oder von 0 - 999 usw.
Und ja das letzte 5^40 war Mist, das wären einfach nur 200 Stellen. Die Anzahl der Möglichkeiten wäre also die Anzahl der möglichen Zahlen^200
 
Es ist eine Zahl mit 40 stellen: jede Stelle geht von 1-5.
 
ich habe keine ahnung von vb oder c# aber verstehe ich richtig das du ein array a der länge 40 mit jeweils 5 ziffern (nicht zahlen) da drin hast zb a[0]={0, 5, 8, 2,8}.

sehe ich es richtig, das dein problem ist, auch wirklich keine möglichkeit für den check zu vergessen? dann empfehle ich dir wie folgt die zahlen zu prüfen 1. array: a[0][0], a[1][0] ... a[39][0] 2. a[0][1], a[0][0] ... 3. a[0][2], a[1][0] ... 4. a[0][3], a[1][0] ... 5. a[0][4], a[1][0] ... 6. a[0][0], a[1][1], a[2][0], ... , a[39][0] 7. a[0][1], a[1][1], a[2][0] ... 8. a[0][2], a[1][1], a[2][0] ...

das heisst du beginnst beim ersten element des arrays mit erhöhen a[0] ersetzt du im nächsten schritt mit a[0][i+1] wenn nun i+1 == 5 dann erhöhst du a[1] auf a[1][i+1] und ersetzt a[0][5] (das es nicht gibt) wider mit a[0][0]. immer wenn du bei einem element a[j][4] erreichst erhöhst du im nächsten schritt a[j+1][k] auf a[j+1][k+1] und ersetzt a[j][4] mit a[j][0]. im letzten durchgang muss dann array2 = {a[0][4], a[1][4], a[2][4], ... , a[39][4]} sein. ich hoffe du verstehst wie ich es nummeriere.

falls ich das problem richtig verstanden habe, so hat er für array2[0] 5 möglichkeiten bis zu array2[39] auch 5 möglichkeiten, das sind 5*5*...*5 = 5^40 möglichkeiten für array2. man kann sich dies leicht mit einer zweistelligen zahl mit jeweils 3 möglichkeiten pro ziffer veranschaulichen.

edit: habe gerade bemerkt, das es echt egal ist ob ziffern zahlen oder äpfel. sind einfach 5 elemente drin die angeordnet werden.
 
Zuletzt bearbeitet:
Falls du dein Array einfach mit allen 5^40 moeglichkeiten nacheinander fuellen willst hilft dir diese Methode vllt:

| public static void naechsteMoeglichkeit(Integer arr[][]) {
| arr[0][0]++;
| for (int i=0; i<40; i++) {
| for (int j=0; j<5; j++) {
| if (arr[j] > 5) {
| arr[j] = 1;
| if (j+1 < 5)
| arr[j+1]++;
| else
| arr[i+1][0]++;
| }
| }
| }
| }
Das Array muss aber vorher schon mit 1'en gefuellt sein, wenn du Werte zwischen 1-5 haben willst
Wenn du also alle moeglichkeiten angezeigt bekomen willst musst du halt diese Methode 5^40 mal aufrufen.
Habs bei mir ausprobiert und nach einiger Zeit abgebrochen weil es einfach zu lange dauert.
5^40 ist nicht gerade wenig ^^.

PS: Das ist zwar Java aber C# ist ja nich viel anders.
 
Zuletzt bearbeitet:
Für ne Zahl mit 40 Stellen, bei der es für jede Ziffer 5 verschieden Möglichkeiten gibt, beläuft sich die Anzahl der möglichen Kombinationen auf 5^40.

Weil 5^40 zu lange dauert hab ich grad mal ne Schleife gebastelt, die 5^10 Durchläufe macht und die Zeit gestoppt.
Ergebnis: etwas mehr als 1 Sekunde.

5^40 / 5^10 = 931322574615478515625

931322574615478515625 Sekunden sind ca. 29,53 Billionen Jahre.
Viel Spaß beim warten auf dein Ergebnis :evillol:
 
Zurück
Oben