Вероятность и случайные числа
Я только начинаю с C++ и создаю простое текстовое приключение. Я пытаюсь выяснить, как иметь вероятностные события. Например, 50% вероятности, что при открытии ящика будет меч, а 50% - ножом. Я знаю, как создать генератор случайных чисел, но я не знаю, как связать это число с чем-то. Я создал вариант того, что я хочу, но он требует, чтобы пользователь ввел случайное число. Мне интересно, как основать оператор if на том, было ли случайное число больше или меньше 50, а не на том, было ли введенное пользователем число больше или меньше 50.
2 ответа
Используйте оператор покоя% с рандом. rand()%2 может дать вам 0 или 1. Позволяет 0 быть мечом, а 1 - ножом.
Если вам также нужен топор, используйте rand()%3. Это может дать вам 0,1 или 2.
2 представляет топор, а 0 и 1, как указано выше. Тогда if и elses очевидны.
rand ()% n, где n - большое число, с большей вероятностью даст вам меньшие числа. Вероятность неравномерно распределена. Вы можете проверить некоторые генераторы случайных чисел из stl или boost.
Если вы используете rand()
он генерирует числа в диапазоне 0..RAND_MAX
, Так что с вероятностью 50% вы можете сделать что-то вроде:
#include <stdlib.h>
if (rand() < RAND_MAX / 2)
{
// sword - 50% probability
}
else
{
// knife - 50% probability
}
Очевидно, что вы можете распространить это на более чем два разных случая с любой заданной вероятностью для каждого случая, просто определив соответствующие пороговые значения в диапазоне 0..RAND_MAX
для каждого случая, например
int r = rand();
if (r < RAND_MAX / 4)
{
// sword - 25% probability
}
else if (r < 3 * RAND_MAX / 4)
{
// knife - 50% probability
}
else
{
// axe - 25% probability
}