Wie kann ich Zufallszahlen von 0 - 4 so generieren, dass die gleiche Zahl nicht zweimal hintereinander generiert wird? Wenn zum Beispiel 3 die Nummer ist, die beim ersten Mal erzeugt wird, dann sind 0,1,2,4 die möglichen Zahlen für die Zufallserzeugung beim zweiten Mal. Wenn 2 das zweite Mal erzeugt wird, dann sind 0,1,3,4 die möglichen Zahlen für die Zufallserzeugung das dritte Mal und so weiter. Generieren von Zufallszahlen ohne fortlaufende Wiederholung
Antwort
int oldrand = <prior random number>;
int adder = randomNumberGenerator() % 4;
int newrand = (oldrand + adder + 1) % 5;
Ich bin mir nicht sicher, ob ich verstehe, wie diese Lösung funktioniert. Ich würde es schätzen, wenn Sie weiter erklären. – oopology
@oopology - Sie haben eine Nummer 0 .. 4. Sie wollen eine andere Nummer im selben Bereich, nur nicht genau die gleiche Nummer.Fügen Sie also eine beliebige Zahl zwischen 1 und 4 zur ersten Zahl hinzu. Wenn die Addition überläuft, "wickeln Sie sie herum". Also, wenn Ihre erste Zahl 3 ist und Sie einen zufälligen Wert 2 wählen, dann addieren Sie 3 + 2 + 1, Sie erhalten 6, was größer als Ihr Bereich ist. Aber 5 Wraps zu 0 und 6 Wraps zu 1, also ist dein Ergebnis 1. –
danke für die Erklärung. Ich wünschte, ich hätte genug Stimmen, um Ihre Erklärung zu geben und eine Abstimmung abzugeben. – oopology
uint32_t myRandomNumber(uint32_t upperBound, uint32_t avoid) {
if (avoid < upperBound) {
--upperBound;
}
uint32_t number = arc4random_uniform(upperBound);
if (number >= avoid) {
++number;
}
return number;
}
es, wie dies das erste Mal Aufruf:
uint32_t number = myRandomNumber(5, 5);
es wie folgt nach dem ersten Aufruf:
number = myRandomNumber(5, number);
kann es bei der Verwendung von 2-Arrays erzeugt werden; 1 wird sortiert und der andere, indem zufällige Objekte sortierter Form wie
-(NSMutableArray *)generateRandomNumbersFrom:(int) a to:(int)b
{
NSMutableArray * numbersWillBeChosen=[NSMutableArray new];
NSMutableArray * randomList=[NSMutableArray new];
//add the numbers that will create your ramdom list in order
for(int k=0;k<=(b-a);k++)
{
[numbersWillBeChosen addObject:@(a+k)];
}
//create random list
for (int p=(b-a)+1; p>0; p--) {
int rand= arc4random()%p;
[randomList addObject:[numbersWillBeChosen objectAtIndex:rand]];
[numbersWillBeChosen removeObjectAtIndex:rand];
}
NSLog(@"%@",randomList);
return randomList;
}
erstellt wird, und Sie können
randList=[self generateRandomNumbersFrom:0 to:4];
Ich versuchte Hot lecken Antwort für Ihre Situation anrufen und es endete Duplikate für mich zu erzeugen (oder außerhalb der Bereichsnummern). Aber es hat mich inspiriert, eine Lösung zu finden, die für mich funktioniert hat.
Mein Code ist C#, aber Sie können ihn an Ihre Bedürfnisse anpassen.
//Returns a random number not same as previous random number. ie. no 2 consec random
public static int NonConsecRandom(int max, int? lastNum=null)
{
if (lastNum == null)
return Random.Range(0, max);
int last = (int)lastNum;
return Random.Range(last + 1, last + max) % max;
}
Erläuterung:
ersten Block gibt nur eine Zufallszahl, wenn es keine zuvor Nummer generiert.
Der zweite Teil erzeugt eine Zufallszahl aus den "anderen Zahlen".
Zum Beispiel, wenn mein "max" war 5, die möglichen Zufallszahlen sind: 0, 1, 2, 3, 4
Lets meine letzte Nummer sagen 2 war, jetzt will ich eine Zufallszahl zwischen [ 3, 4, 0, 1]
Also erzeuge ich eine zufällige zwischen letzten + 1 und letzten + max. dh zwischen 3 (einschließlich) und 7 (nicht inklusive)
[3, 4, 5, 6]
Mod eine dieser Zahlen mit max (dh 5) und Sie erhalten eine Zufallszahl erhalten in der gewünschte Bereich: [3, 4, 0, 1]
- 1. Nicht Wiederholung Zufallszahlen
- 2. Generieren von geometrischen Zufallszahlen
- 3. Generieren von Zufallszahlen ohne Duplikate nur mit Arrays
- 4. Generieren von Zufallszahlen in einem Array ohne doppelte Zahlen
- 5. Generieren Sie verschiedene Zufallszahlen
- 6. Generieren von Zufallszahlen durch Gruppe mit Ersatz
- 7. mit Rand zum Generieren von Zufallszahlen
- 8. Generieren von Zufallszahlen mit einer bestimmten Verteilung
- 9. Generieren von Zufallszahlen außer bestimmten Werten
- 10. Sequenz von Zufallszahlen ohne Wiederholungen
- 11. Generieren Sie Zufallszahlen nach Verteilungen
- 12. Lognormale Zufallszahlen in MATLAB generieren?
- 13. Wie generiert man Zufallszahlen ohne Wiederholung in der Datenbank mit PHP?
- 14. Zufallszahlen generieren und in Textfeld einfügen
- 15. Generieren von Zufallszahlen in For-Schleife von externer Klasse
- 16. Methode ohne Wiederholung
- 17. Wie kann ich Zufallszahlen in Python generieren?
- 18. 3 Zufallszahlen von 2 Zufallszahlen Aufgabe
- 19. Generieren von Zufallszahlen mit Schleife im Intervall VB.NET
- 20. Algorithmus zum Generieren von Zufallszahlen aus einer diskreten Verteilung?
- 21. Generieren von Zufallszahlen mit logarithmischer Verteilung und benutzerdefinierter Steigung
- 22. Mit math.random eine bestimmte Anzahl von Zufallszahlen in Java generieren
- 23. Generieren von Zufallszahlen in Objective C für iPhone SDK
- 24. Generieren von Zufallszahlen mit gewichteten Wahrscheinlichkeiten in Python
- 25. bekommen alle Kombinationen von Zahlen ohne Wiederholung
- 26. alle Kombinationen mit Wiederholung generieren MATLAB
- 27. Access 2013 - fortlaufende Nummerierung ohne Autonummer
- 28. Algorithmus für Permutationen ohne Wiederholung?
- 29. generieren eindeutige fortlaufende Nummern SQL in Multi-User-Umgebung mit
- 30. PHP ramdom Wort ohne Wiederholung
Sie können nicht beliebig weniger zufällig machen. Verwenden Sie ein NSSet für das Unigeln. – CodaFi
mögliches Duplikat von [Zufallszahl aus gegebener Nummer erzeugen] (http://stackoverflow.com/questions/15680582/generate-random-number-from-given-number) –
Siehe auch http://stackoverflow.com/a/ 56656/1187415. –