Как я могу генерировать случайные целые числа от 0 до 4 так, чтобы одно и то же число не генерировалось дважды подряд? Например, если 3 - это число, которое генерируется в первый раз, тогда 0,1,2,4 будут возможными числами для случайной генерации во второй раз. Если 2 генерируется второй раз, тогда 0,1,3,4 будут возможными числами для случайной генерации в третий раз и т. Д.генерирование случайных чисел без последовательного повторения
ответ
int oldrand = <prior random number>;
int adder = randomNumberGenerator() % 4;
int newrand = (oldrand + adder + 1) % 5;
Я не уверен, что понимаю, как это решение работает. Буду признателен, если вы объясните дальше. – oopology
@oopology - У вас есть номер 0 .. 4. Вы хотите, чтобы другое число в том же диапазоне, но не точно такое же число.Поэтому добавьте любое число от 1 до 4 к первому числу, затем, если добавление переполняется, «оберните его». Поэтому, если ваше первое число равно 3, и вы выбираете случайное значение 2, добавьте 3 + 2 + 1, вы получите 6, что больше вашего диапазона. Но 5 оберток до 0 и 6 оберток до 1, поэтому ваш результат равен 1. –
спасибо за объяснение. Хотелось бы, чтобы у меня было достаточно голосов, чтобы дать ваше объяснение и ответить на голосование. – 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;
}
Назовем это, как это в первый раз:
uint32_t number = myRandomNumber(5, 5);
назвать это, как это после того, как в первый раз:
number = myRandomNumber(5, number);
он может быть сформирован с использованием 2 массивов; 1 сортируются и другой создается путем принятия случайных объектов образует сортируется как
-(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;
}
и вы можете вызвать для вашей ситуации
randList=[self generateRandomNumbersFrom:0 to:4];
Я попытался ответить Hot облизать, и это в конечном итоге создание дубликатов для меня (или вне диапазона). Но это вдохновило меня придумать решение, которое сработало для меня.
Мой код C#, но вы можете изменить его в соответствии с вашими потребностями.
//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;
}
Пояснение:
первый блок просто возвращает случайное число, если не было ранее сгенерированное число.
Вторая часть генерирует случайное число из «других чисел».
Например, если мой «Макс» был 5, возможные случайные числа: 0, 1, 2, 3, 4
Допустим, мое последнее число было 2, теперь я хочу случайное число между [ 3, 4, 0, 1]
Поэтому я генерирую случайное значение между последним + 1 и последним + макс. т.е. между 3 (включительно) и 7 (не включительно)
[3, 4, 5, 6]
Mod любой из этих чисел с максимальной (т.е. 5) и вы получите случайное число желаемый диапазон: [3, 4, 0, 1]
- 1. генерирование случайных чисел без повторения с исключением AS3
- 2. генератор случайных чисел без повторения
- 3. Генерация случайных чисел без повторения
- 4. SIMPLE генерирование случайных чисел
- 5. C++ генератор случайных чисел без повторения чисел
- 6. Пользовательское генерирование случайных чисел
- 7. Надежное генерирование случайных чисел
- 8. уникальное генерирование случайных чисел
- 9. Правильное генерирование случайных чисел
- 10. генерирование случайных чисел без дубликатов в java
- 11. генерирование отсортированных случайных чисел без участия экспоненции?
- 12. Создать список случайных чисел без повторения
- 13. Генератор случайных чисел без повторения результатов
- 14. Генерация случайных чисел без повторения в Java
- 15. несколько случайных чисел в php без повторения?
- 16. Генерация случайных чисел без повторения. C#
- 17. Создайте генератор случайных чисел без повторения
- 18. Число случайных чисел без повторения номера
- 19. Создание 9 случайных чисел без повторения
- 20. Получение 10 случайных целых чисел без повторения?
- 21. Эффективное генерирование дискретных случайных чисел
- 22. C++ генерирование случайных чисел-1
- 23. генерирование случайных чисел в php
- 24. генерирование случайных чисел в verilog
- 25. высева и генерирование случайных чисел
- 26. Java - генерирование 3 случайных чисел
- 27. Предотвращение случайных чисел от повторения
- 28. Равномерное генерирование случайных чисел из набора
- 29. Быстрое генерирование случайных чисел, которые кажутся случайными
- 30. Генерирование случайных чисел с помощью MATLAB
Вы не можете делать случайный случайный случай. Используйте NSS для uniquing. – CodaFi
Возможный дубликат [Сгенерировать случайное число из заданного числа] (http://stackoverflow.com/questions/15680582/generate-random-number-from-given-number) –
См. Также http://stackoverflow.com/a/ 56656/1187415. –