Jak wygenerować losowe liczby całkowite z przedziału od 0 do 4 w taki sposób, aby ten sam numer nie był generowany dwa razy pod rząd? Na przykład, jeśli 3 jest liczbą, która jest generowana za pierwszym razem, wówczas 0,1,2,4 będzie możliwymi liczbami do losowego wygenerowania po raz drugi. Jeśli 2 zostanie wygenerowany po raz drugi, to 0,1,3,4 będzie możliwą liczbą do losowego wygenerowania po raz trzeci i tak dalej.generowanie liczb losowych bez kolejnych powtórzeń
Odpowiedz
int oldrand = <prior random number>;
int adder = randomNumberGenerator() % 4;
int newrand = (oldrand + adder + 1) % 5;
Nie jestem pewien, czy rozumiem, jak działa to rozwiązanie. Byłbym wdzięczny, gdybyś wyjaśnił dalej. – oopology
@oopologia - Masz numer 0 .. 4. Chcesz innej liczby w tym samym zakresie, tylko nie dokładnie tyle samo.Więc dodaj dowolną liczbę od 1 do 4 do pierwszej liczby, a następnie, jeśli dodatek się przepełni, "zawiń". Więc jeśli twoja pierwsza liczba to 3, a wybierzesz losową wartość 2, to dodaj 3 + 2 + 1, otrzymasz 6, która jest większa od twojego zasięgu. Ale 5 zawija do 0 i 6 zawija do 1, więc twój wynik to 1. –
dzięki za wyjaśnienie. Żałuję, że nie mam wystarczającej liczby głosów, by przedstawić twoje wyjaśnienia i odpowiedzieć na głos. – 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;
}
to nazwać jak to po raz pierwszy:
uint32_t number = myRandomNumber(5, 5);
Wywołanie to w ten sposób po raz pierwszy:
number = myRandomNumber(5, number);
może być generowana przy użyciu 2 tablic; 1 są sortowane, a drugi jest tworzony poprzez przypadkowe przedmioty tworzą klasyfikowane jak
-(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;
}
i można zadzwonić do sytuacji
randList=[self generateRandomNumbersFrom:0 to:4];
Próbowałem odpowiedź Hot lizać i skończyło się na generowaniu duplikaty dla mnie (lub poza zakresem numerów). Ale to zainspirowało mnie do znalezienia rozwiązania, które zadziałałoby dla mnie.
Mój kod to C#, ale możesz go zmodyfikować zgodnie ze swoimi potrzebami.
//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;
}
Objaśnienie:
pierwszy blok po prostu zwraca liczbę losową Jeśli nie było wcześniej wygenerowany numer.
Druga część generuje losową liczbę z "innych liczb".
Na przykład, jeśli mój "max" był 5, możliwych liczb losowych są: 0, 1, 2, 3, 4
Powiedzmy moja ostatnia liczba to 2, teraz chcę losową liczbę wśród [ 3, 4, 0, 1]
Tak więc generuję losowe wartości między ostatnim + 1 a ostatnim + maks. czyli między 3 (włącznie) i 7 (nie włącznie)
[3, 4, 5, 6]
Mod każda z tych liczb z max (czyli 5), a otrzymasz liczbę losową w żądany zakres: [3, 4, 0, 1]
- 1. Generowanie liczb losowych bez powtórzeń
- 2. Generowanie liczb losowych bez użycia operacji bitowych
- 3. android - generowanie liczb losowych bez powtarzania
- 4. Generowanie liczb losowych CUDA
- 5. Generowanie liczb losowych w Swift
- 6. Generowanie bardzo dużych liczb losowych java
- 7. Generowanie liczb losowych w aplikacjach MVC
- 8. Różne generowanie liczb losowych między OS
- 9. Generowanie liczb losowych między wieloma waha
- 10. Generowanie "In-Range" liczb losowych w C
- 11. Generowanie liczb losowych z wyjątkiem pewnych wartości
- 12. Generowanie lognormalnych liczb losowych w MATLAB?
- 13. Równoległe generowanie liczb losowych za pomocą Akka Futures
- 14. Generowanie losowych liczb całkowitych w zakresie o rozkładzie prawdopodobieństwa
- 15. Generowanie liczb losowych z ważonymi prawdopodobieństwami w pythonie
- 16. Generowanie skorelowanych liczb losowych z dwumianowych rozkładów w R
- 17. Generowanie liczb losowych w każdym rzędzie w Oracle Query
- 18. Generowanie unikatowych liczb losowych w Postgresql o ustalonej długości
- 19. Siew Wiele liczb losowych Generatory
- 20. Wywołanie funkcji generowania liczb losowych nie generuje całkowicie losowych liczb.
- 21. C++ 11 liczb losowych
- 22. Generator liczb losowych Crossplatform
- 23. Boost generator liczb losowych
- 24. Generowanie losowych certyfikatów
- 25. Uzyskiwanie liczb losowych z listy liczb całkowitych
- 26. równomiernie rozłożona generacja liczb losowych
- 27. Algorytm dla "gładkich" liczb losowych
- 28. Specjalny prosty generator liczb losowych
- 29. Jak zresetować silnik liczb losowych?
- 30. Niejednorodna implementacja generatora liczb losowych?
Nie można zrobić losowego mniej losowego. Użyj NSSet do unifikacji. – CodaFi
możliwy duplikat [Generuj losową liczbę z podanej liczby] (http://stackoverflow.com/questions/15680582/generate-random-number-from-given-number) –
Zobacz także http://stackoverflow.com/a/ 56656/1187415. –