Я пытаюсь создать случайное число в диапазоне от -1 до 6, но каждый раз, когда я генерирую случайное число, вероятность получение числа в диапазоне задается процентом. Например, в списке процентов первый процент имеет вероятность генерации 6, второй процент имеет вероятность генерации 5 и т. Д. Номера должны генерироваться случайным образом. Я пытаюсь закодировать это в C. Спасибо за ваши идеи.Как создать случайное число в пределах диапазона, учитывая вероятность получения одного из чисел
ответ
Вы можете получить случайное число от 0 до 100 и проверить, какой процентный диапазон попадает и назначить ему соответствующее значение.
Например:
0 - 5 : -1
5 - 25 : 0
25 - 31: 1
31 - 48: 2
48 - 50: 3
50 - 75: 4
75 - 87: 5
87 - 100: 6
EDIT:
Для реализации этого вам потребуется один или два массива, один, который хранит процентные границы (значение 5, 25, 31, 48, 50 , 75, 87 в этом случае) и еще один массив, в котором хранятся выходные значения (если выходы полностью случайны, здесь, где они являются последовательными, вам не понадобится второй массив).
Тогда вы получите позвонить rand() * 100.0/RAND_MAX
, чтобы получить случайный поплавок от 0 до 100 или rand() % 100 + 1
для случайного междунар между 0 и 100.
С этим вы можете использовать бинарный метод поиска, чтобы найти какой процент диапазона это соответствует в O (log n). С индексом вы найдете соответствующий результат (либо через массив, либо функцию)
Я действительно сделал что-то вроде этого, но я учил, что делал это неправильно .. но спасибо за разъяснение этого для меня – user1319817
Я уверен, что есть другие, возможно, лучшие способы сделать это, но на ум приходит следующее: создать массив, содержащий соответствующие копии каждого номера (от -1 до 6) в соответствии с вашими процентами. Затем произвольно выберите элемент в массиве.
Это работает, если проценты являются целыми числами, для процентов, таких как 0,5%, это не сработало – SirGuy
Это домашнее задание? Я не собираюсь предполагать, что ради вероисповедания в человечестве;)
Итак, я имею в виду, что все ваши проценты должны содержать до 100 прав? Вы можете сгенерировать число от 0 до 100 и посмотреть, в какую скобку он попадает.
т.е. если ваши проценты [10,20,35,15,10,10]
Тогда первая скобка "< 10" так что любое число, генерируемое при 10 yeilds 6
x < 10 --> 6
10 <= x < (10+20) --> 5
(10+20) <= x < (10+20+35) --> 4
(10+20+35) <= x < (10+20+35+15) --> 3
и т. Д. Вы хотите создать случайное значение поплавка от 1 до 100, чтобы удовлетворить процентные ставки, например 11.9.
Нет, это не домашняя работа назначение;) Я просто попытался сделать простую текстовую игру. Спасибо за вход :) – user1319817
Я думаю, что самый простой способ сделать это, чтобы рассмотреть следующую аналогию:
Если у вас есть строка [0,1], вы можете думать, что производящее число от 1 до 4 эквивалентно расколоть строка в 4 сегментах, S_1 = [0,1/4], S_2 = [1/4,2/4], S_3 = [2/4,3/4], S_4 = [3/4,1]. Таким образом, когда вы создаете число из [0,1], если оно попадает на сегмент S_i, сгенерированное число равно i.
Если вы хотите назначить разные вероятности каждому номеру, скажем p_i, вам просто нужно разделить сегмент разных размеров, в соответствии с p_i.
Например, для 1 с p_1 = 0,1, 2 с p_2 = 0,4, 3 с p_3 = 0,2 и 4 с p_4 = 0.3 вы можете использовать сегменты S_1 = [0, p_1], S_2 = [p_1, p_1 + p_2], S_3 = [p_1 + p_2, p_1 + p_2 + p_3] и S_4 = [p_1 + p_2 + p_3, p_1 + p_2 + p_3 + p_4]
Затем вы создаете равномерное случайное число на [0,1] и проверяете, упал ли он на S_i.
У вас есть хороший момент. Это очень похоже на мое решение, но диапазон может быть действительно любым диапазоном, который вы хотите использовать. Я полагаю, если коэффициенты верны. Диапазон значений между 0 и 1 хорош, если ваши проценты и генератор случайных чисел уже находятся в этом диапазоне. – mltsy
Сделать массив, чтобы иметь 100 элементов, заполнить его -1 до 6, в зависимости от того, сколько веса каждый нуждается. например, если вам нужно -1, чтобы получить 15% -ный удар, вы заполняете 15 элементов с -1. теперь генерируют случайное число от 1 до 100 и просто просматривают массив, вы получаете взвешенные результаты.
, который не работает для десятичных процентов, например, 0,5% – SirGuy
, так как он делает текстовую базовую игру, я думаю, что целочисленный процент достаточен, если он не говорит иначе. Это также должно обеспечить хорошую производительность для высокочастотного использования. – pizza
Согласен, я не имел в виду, что ваш метод был недействительным, просто есть оговорка – SirGuy
- 1. Создать случайное число в пределах диапазона?
- 2. Создать уникальное случайное число «n» в пределах диапазона
- 3. Необходимо создать случайное целое число в пределах заданного диапазона
- 4. Как найти случайное число в пределах диапазона, исключая номера
- 5. Как создать случайное число в Bash?
- 6. Android: случайное число от диапазона
- 7. Генерировать случайное целое число в пределах диапазона (бесконечный цикл)
- 8. C++: Как сгенерировать случайное число из массива
- 9. Как создать случайное число, включая дату?
- 10. Как создать случайное число из массива
- 11. Случайное число в пределах диапазона для Float OR Int
- 12. Случайное число в пределах диапазона на основе нормального распределения
- 13. Случайное число не в пределах
- 14. Создать случайное четное число внутри диапазона?
- 15. Как создать нормально распределенное случайное из целочисленного диапазона?
- 16. Как создать неповторяющееся случайное число?
- 17. CSS Случайное положение фонового изображения в пределах диапазона и приращения; случайное число для времени преобразования
- 18. Как получить конкретное случайное число из трех чисел в android
- 19. Случайное число Из заданных чисел в C#
- 20. Как создать случайное число?
- 21. Как создать реальное случайное число в C?
- 22. Как сгенерировать случайное число из целого диапазона int в C?
- 23. Случайное число из диапазона, используя C
- 24. Случайное число с вероятностями
- 25. Создать случайное значение из списка чисел
- 26. Выберите случайное число из списка целых чисел
- 27. Выберите случайное число из набора чисел
- 28. Как генерировать случайное число из требуемого диапазона с помощью python
- 29. mysql procedure - случайное число из пяти чисел
- 30. Генерировать случайное число из определенных целых чисел
К VTC-ers. Это на самом деле довольно распространенная вещь (противоположность слишком локализованной), хотя она описана немного запутанно. – bitmask