Come posso generare numeri casuali da 0 a 4 in modo che lo stesso numero non venga generato due volte consecutivamente? Ad esempio, se 3 è il numero che viene generato la prima volta, allora 0,1,2,4 saranno i numeri possibili per la generazione casuale la seconda volta. Se 2 viene generato la seconda volta allora 0,1,3,4 saranno i numeri possibili per la generazione casuale la terza volta e così via.generazione di numeri casuali senza ripetizione consecutiva
risposta
int oldrand = <prior random number>;
int adder = randomNumberGenerator() % 4;
int newrand = (oldrand + adder + 1) % 5;
Non sono sicuro di aver capito come funziona questa soluzione. Lo apprezzerei se spiegassi ulteriormente. – oopology
@oopology - Hai un numero 0 .. 4. Vuoi un altro numero nello stesso intervallo, solo non esattamente lo stesso numero.Quindi aggiungi qualsiasi numero compreso tra 1 e 4 al primo numero, quindi, se l'aggiunta trabocca, "avvolgi tutto". Quindi se il tuo primo numero è 3 e scegli un valore casuale 2, quindi aggiungi 3 + 2 + 1, ottieni 6, che è più grande del tuo intervallo. Ma 5 avvolge a 0 e 6 avvolge a 1, quindi il risultato è 1. –
grazie per la spiegazione. Vorrei avere abbastanza voti per dare la tua spiegazione e rispondere a un voto alto. – 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;
}
chiamare in questo modo la prima volta:
uint32_t number = myRandomNumber(5, 5);
chiamare in questo modo dopo la prima volta:
number = myRandomNumber(5, number);
può essere generato con l'utilizzo di 2 allineamenti; 1 è ordinato e l'altro è stato creato da prendendo oggetti casuali forma ordinato come
-(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;
}
e si può chiamare per la vostra situazione
randList=[self generateRandomNumbersFrom:0 to:4];
ho cercato la risposta di Hot Lick ed è finito per generare i duplicati per me (o fuori dai numeri di intervallo). Ma mi ha ispirato a trovare una soluzione che funzionasse per me.
Il mio codice è C#, ma è possibile modificarlo in base alle proprie esigenze.
//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;
}
Spiegazione:
primo blocco restituisce solo un numero casuale se non ci fosse in precedenza numero generato.
la seconda parte genera un numero casuale dagli "altri numeri".
Per esempio se il mio "max" è stato 5, i possibili numeri casuali sono: 0, 1, 2, 3, 4
consente di dire il mio ultimo numero era 2, ora voglio un numero casuale tra [ 3, 4, 0, 1]
Così generato un intervallo tra ultimo + 1 e ultimo + max. cioè tra 3 (compreso) e 7 (non incluso)
[3, 4, 5, 6]
Mod uno qualsiasi di questi numeri con max (cioè 5) e si otterrà un numero casuale in l'intervallo desiderato: [3, 4, 0, 1]
- 1. Generazione di numeri casuali senza ripetizioni
- 2. Generazione contemporanea di numeri casuali
- 3. Spark - Generazione di numeri casuali
- 4. Android - generare numeri casuali con nessuna ripetizione
- 5. Generazione di numeri casuali senza utilizzare operazioni bit
- 6. Generazione di numeri casuali di grandi dimensioni
- 7. Generazione di numeri casuali diversi tra OS
- 8. Generazione di numeri casuali molto grandi java
- 9. Generazione di numeri casuali su Spartan-3E
- 10. Generazione casuale di numeri casuali in R
- 11. Generazione di numeri casuali uniformemente distribuiti
- 12. Deterministica generazione di numeri casuali su sistemi
- 13. Generazione di numeri casuali in applicazioni MVC
- 14. I semi vicini nella generazione di numeri casuali possono fornire numeri casuali simili?
- 15. Generazione sequenziale di numeri casuali distribuiti in Ruby 1.9.2
- 16. Generazione di due sequenze indipendenti di numeri casuali (C++)
- 17. Generazione di numeri casuali nell'intervallo con una distribuzione di probabilità
- 18. Generazione di numeri casuali da -n a n in C
- 19. srand (time (0)) e generazione di numeri casuali
- 20. Generazione di numeri casuali nell'obiettivo C per iPhone SDK
- 21. Generazione parallela di numeri casuali con Akka Futures
- 22. Differenza tra generazione di numeri casuali C++ e Python
- 23. Generazione di numeri casuali con awk nella shell BASH
- 24. Generazione di numeri casuali con probabilità ponderate in python
- 25. Generazione di numeri interi casuali con probabilità date
- 26. Python's pythonto library per generazione di numeri casuali vs os.urandom
- 27. generazione di enumerazioni casuali
- 28. C++ 11 numeri casuali
- 29. speciale di numeri casuali
- 30. Generazione di miniature casuali con PHP + FFMPEG
Non è possibile rendere casuali meno casuali. Utilizzare un NSSet per l'uniquing. – CodaFi
possibile duplicato di [Genera numero casuale dal numero dato] (http://stackoverflow.com/questions/15680582/generate-random-number-from-given-number) –
Vedere anche http://stackoverflow.com/a/ 56656/1187415. –