Вероятность и случайные числа

Я только начинаю с 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
}
Другие вопросы по тегам