mathematische Zufallszahl ohne Wiederholung einer vorherigen Zahl

8

Ich kann keine Antwort darauf finden, sage ich habe das:

%Vor%

Wie mache ich es so, dass sich die Zufallszahl nicht wiederholt? Wenn zum Beispiel die Zufallszahl 2 ist, möchte ich nicht, dass 2 wieder herauskommt.

    
daryl 08.07.2011, 14:01
quelle

8 Antworten

9

Es gibt verschiedene Möglichkeiten, dies zu erreichen.

Lösung A: Wenn der Zahlenbereich nicht groß ist (sagen wir weniger als 10), können Sie einfach die Zahlen verfolgen, die Sie bereits generiert haben. Dann, wenn Sie ein Duplikat erzeugen, verwerfen Sie es und erzeugen Sie eine andere Nummer.

Lösung B: Erzeugen Sie die Zufallszahlen vor, speichern Sie sie in einem Array und gehen Sie dann durch das Array. Sie können dies erreichen, indem Sie die Zahlen 1,2,...,n nehmen und sie dann mischen. Siehe Ссылка

%Vor%

Lösung C: Verfolgen Sie die Nummern, die in einem Array verfügbar sind. Wähle zufällig eine Nummer. Entferne die Nummer aus dem Array.

%Vor%     
tskuzzy 08.07.2011, 14:11
quelle
3

Sie scheinen eine sich nicht wiederholende Zufallszahl von 0 bis 6 zu haben, ähnlich der Antwort von tsukuzzy:

%Vor%

Es werden die Zahlen 0 bis 6 in zufälliger Reihenfolge zurückgegeben. Wenn jede einmal gezeichnet wurde, wird sie erneut gestartet.

    
RobG 08.07.2011 14:54
quelle
0

Könnten Sie das versuchen,

%Vor%     
Alexander Beletsky 08.07.2011 14:06
quelle
0

Im Allgemeinen besteht mein Ansatz darin, ein Array zu erstellen, das alle möglichen Werte enthält und zu:

  1. Wählen Sie eine Zufallszahl & lt; = die Größe des Arrays
  2. Entfernen Sie das ausgewählte Element aus dem Array
  3. Wiederholen Sie die Schritte 1-2, bis das Array leer ist

Die resultierende Menge von Zahlen enthält alle Ihre Indizes ohne Wiederholung.

Noch besser, vielleicht so etwas:

%Vor%

Dann gehen Sie einfach durch die Elemente, weil shuffle sie randomisiert hat und sie einzeln nacheinander ausgibt.

    
aardvarkk 08.07.2011 14:06
quelle
0

Ich mag Neals Antwort, obwohl diese um eine Rekursion bettelt. Hier ist es in Java, Sie werden immer noch die allgemeine Idee bekommen. Beachte, dass du eine Endlosschleife triffst, wenn du mehr Zahlen als MAX herausziehst, hätte ich das korrigieren können, aber es aus Gründen der Klarheit belassen.

edit: Säge Neal hinzugefügt eine While-Schleife, so dass funktioniert gut.

%Vor%     
CodingStix 08.07.2011 14:25
quelle
0

nicht sicher, ob es zu spät ist, aber würde immer noch gerne hinzufügen -

%Vor%

verwendet im Prinzip Zeitstempel (jede Millisekunde), um immer eine eindeutige Nummer zu erzeugen.

    
user2514880 15.07.2013 02:18
quelle
0

Hier ist eine einfache Lösung, wenn auch etwas rudimentär:

%Vor%

Wenn die nächste Zahl die gleiche ist wie die letzte, einfach minus 1, es sei denn, die Zahl ist 0 (Null) und auf eine andere Zahl innerhalb der Menge gesetzt (ich wählte 7, den höchsten Index).

Ich habe diese Methode in der Zyklusfunktion verwendet, weil die einzige Bedingung für die Auswahl einer Zahl war, dass sie nicht die gleiche sein sollte wie die letzte.

Nicht die eleganteste oder technisch begabteste Lösung, aber es funktioniert:)

    
Tim Cutting 29.08.2013 12:07
quelle
-1
___ answer6625611 ___

Könnten Sie das versuchen,

%Vor%     
___ answer6626255 ___

Sie scheinen eine sich nicht wiederholende Zufallszahl von 0 bis 6 zu haben, ähnlich der Antwort von tsukuzzy:

%Vor%

Es werden die Zahlen 0 bis 6 in zufälliger Reihenfolge zurückgegeben. Wenn jede einmal gezeichnet wurde, wird sie erneut gestartet.

    
___ answer6625690 ___

Es gibt verschiedene Möglichkeiten, dies zu erreichen.

Lösung A: Wenn der Zahlenbereich nicht groß ist (sagen wir weniger als 10), können Sie einfach die Zahlen verfolgen, die Sie bereits generiert haben. Dann, wenn Sie ein Duplikat erzeugen, verwerfen Sie es und erzeugen Sie eine andere Nummer.

Lösung B: Erzeugen Sie die Zufallszahlen vor, speichern Sie sie in einem Array und gehen Sie dann durch das Array. Sie können dies erreichen, indem Sie die Zahlen %code% nehmen und sie dann mischen. Siehe Ссылка

%Vor%

Lösung C: Verfolgen Sie die Nummern, die in einem Array verfügbar sind. Wähle zufällig eine Nummer. Entferne die Nummer aus dem Array.

%Vor%     
___ qstnhdr ___ mathematische Zufallszahl ohne Wiederholung einer vorherigen Zahl ___ answer6625615 ___

Im Allgemeinen besteht mein Ansatz darin, ein Array zu erstellen, das alle möglichen Werte enthält und zu:

  1. Wählen Sie eine Zufallszahl & lt; = die Größe des Arrays
  2. Entfernen Sie das ausgewählte Element aus dem Array
  3. Wiederholen Sie die Schritte 1-2, bis das Array leer ist

Die resultierende Menge von Zahlen enthält alle Ihre Indizes ohne Wiederholung.

Noch besser, vielleicht so etwas:

%Vor%

Dann gehen Sie einfach durch die Elemente, weil shuffle sie randomisiert hat und sie einzeln nacheinander ausgibt.

    
___ answer18510570 ___

Hier ist eine einfache Lösung, wenn auch etwas rudimentär:

%Vor%

Wenn die nächste Zahl die gleiche ist wie die letzte, einfach minus 1, es sei denn, die Zahl ist 0 (Null) und auf eine andere Zahl innerhalb der Menge gesetzt (ich wählte 7, den höchsten Index).

Ich habe diese Methode in der Zyklusfunktion verwendet, weil die einzige Bedingung für die Auswahl einer Zahl war, dass sie nicht die gleiche sein sollte wie die letzte.

Nicht die eleganteste oder technisch begabteste Lösung, aber es funktioniert:)

    
___ qstntxt ___

Ich kann keine Antwort darauf finden, sage ich habe das:

%Vor%

Wie mache ich es so, dass sich die Zufallszahl nicht wiederholt? Wenn zum Beispiel die Zufallszahl 2 ist, möchte ich nicht, dass 2 wieder herauskommt.

    
___ answer17645854 ___

nicht sicher, ob es zu spät ist, aber würde immer noch gerne hinzufügen -

%Vor%

verwendet im Prinzip Zeitstempel (jede Millisekunde), um immer eine eindeutige Nummer zu erzeugen.

    
___ answer6625883 ___

Ich mag Neals Antwort, obwohl diese um eine Rekursion bettelt. Hier ist es in Java, Sie werden immer noch die allgemeine Idee bekommen. Beachte, dass du eine Endlosschleife triffst, wenn du mehr Zahlen als MAX herausziehst, hätte ich das korrigieren können, aber es aus Gründen der Klarheit belassen.

edit: Säge Neal hinzugefügt eine While-Schleife, so dass funktioniert gut.

%Vor%     
___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ tag123random ___ Dieses Tag ist für Fragen gedacht, die sich auf Zufallszahlen und deren Generatoren beziehen, sei es pseudozufällig oder wirklich zufällig. ___ tag123repetition ___ hilf uns dieses Wiki zu bearbeiten ___ antwort6625584 ___

Sie können dies tun. Verwenden Sie ein öffentliches Array von Schlüsseln, die Sie verwendet haben, und überprüfen Sie sie mit dieser Funktion:

%Vor%

(Funktion von: JavaScript-Funktion inArray )

Was Sie also tun können, ist:

%Vor%

Dieser Code wird nach dem Erhalten aller sieben Zahlen stecken bleiben, so dass Sie sicherstellen müssen, dass er existiert, nachdem er alle flossen hat.

    
___
Neal 08.07.2011 14:03
quelle

Tags und Links