fester Zahlenbereich randomisiert
-
Hallo,
ich habe folgendes Problem. Ich brauche ein Integer-Array, das die Werte
0-29 in zufaelliger Reihenfolge enthaelt. Meine Ueberlegung war jetzt 30
Zufallszahlen zu erzeugen, in ungeordneter Reihenfolge in ein zweites Array
zu schreiben und im random-Array zunaechst den Index des kleinsten Elements
in das erste Array zu schreiben, dann den Index des naechstgroesseren, etc..Ist das sinnvoll so vorzugehen, oder gibt es einfachere (schnellere) Methoden
fuer diesen Zweck?Danke fuer Antworten
-
Vielleicht war das zu abstrakt ausgedrueckt.
Das Array ist wie ein Kartenspiel, nur die Reihenfolge der Werte muss
zufaellig sein. Quasi gemischt. Und ich ueberlege, wie man das am
sinnvollsten macht.
-
Du erzeugst ein Array mit den Zahlen von 0 bis 29:
array[i] = i;
Dann gehst du array[0] und suchst dafür einen neuen Index mit einer Zufallszahl von 0- 29 und vertauscht array[0] mit array[zufallstahl]
Dann gehst du zu arry[1] und machst das gleiche, bis du bei arry[29] angekomen bist.
Jetzt hast du in deinem Array Zahlen von 0 bis 29 in einer zufälligen Reihenfolge.Oder beim Kartenspiel:
Du hast das geordnete Spiel, nimmst die erste Karte, überlegst dir einen neuen Platz für diese Karte und dann vertauscht die beiden Karten.
Das selbe machst du für alle andern Karten auch.
-
1. Array erzeugen mit den Werten 0 ... 29
2. Obergrenze = 29 und in einer Schleife
Zufallszahl zwischen 0 und Obergrenze ziehen
Arrayinhalt[Zufallszahl] und Arrayinhalt[Obergrenze] vertauschen
Eins von Obergrenze subtrahieren
bis Obergrenze 0 istNun ist das Array gemischt.
-
Belli schrieb:
....
Oder anders herum
-
Wenn ich das richtig verstehe muss quasi zufaellig jede Zahl meines
Arrays einmal generiert werden. Also laeuft der Algorithmus solange bis
bis rand zufaellig einmal 0, einmal 1, etc... erzeugt hat?
-
DirkB schrieb:
Belli schrieb:
....
Oder anders herum
Ich war einfach zu spät. Ich hätte das nicht gepostet, wenn ich Deine Antwort vorher gesehen hätte.
-
gigg schrieb:
Wenn ich das richtig verstehe muss quasi zufaellig jede Zahl meines
Arrays einmal generiert werden. Also laeuft der Algorithmus solange bis
bis rand zufaellig einmal 0, einmal 1, etc... erzeugt hat?Nö, woraus schliesst Du das?
-
Belli schrieb:
Nö, woraus schliesst Du das?
Moment. Ich muss das erst noch mal durchdenken. Bin nicht mehr der
juengste und arbeite mich nach langer Zeit erst wieder ein.
-
Vielen Dank erstmal fuer eure Antworten.
Gruesse
-
gigg schrieb:
Bin nicht mehr der
juengsteDas ist kein Argument. Ich bekomme nächsten Monat mein zweites Enkelkind.
-
gigg schrieb:
Wenn ich das richtig verstehe muss quasi zufaellig jede Zahl meines
Arrays einmal generiert werden. Also laeuft der Algorithmus solange bis
bis rand zufaellig einmal 0, einmal 1, etc... erzeugt hat?Nein.
Du erzeugst die Zahlen von 0 bis 29 in fester Reihenfolge.
Dein Algorithmus läuft 30 mal da durch.Du nimmst jede Karte in dei Hand und überlegst einen neuen Platz für sie.
selbst wenn ein Zahl mal nicht zufällig gezogen wurde, hast du kommt sie in deinem Stapel drin vor.
0 1 2 3 4 5 6 7 8 9 Karte[0], Zufallszahl 8 -> Karte 0 mit Karte 8 tauschen ^ ^ +---------------+ Diese Karten vertauschen 8 1 2 3 4 5 6 7 0 9 Karte[1], Zufallszahl 3 -> Karte 1 mit Karte 3 tauschen 8 3 2 1 4 5 6 7 0 9 Karte[1], Zufallszahl 3 -> Karte 1 mit Karte 3 tauschen 8 3 2 1 4 5 6 7 0 9 Karte[2], Zufallszahl 0 -> Karte 2 mit Karte 0 tauschen 2 3 8 1 4 5 6 7 0 9 ....
-
Belli schrieb:
gigg schrieb:
Bin nicht mehr der
juengsteDas ist kein Argument. Ich bekomme nächsten Monat mein zweites Enkelkind.
Dann lebst du noch von deinem Langzeitgedächtnis.
-
Jetzt habe ich's begriffen. Danke Dirk und Belli.
-
DirkB schrieb:
Dann lebst du noch von deinem Langzeitgedächtnis.
So ganz falsch ist das nicht!