Как считать сгенерированные случайные числа, удовлетворяющие определенному свойству? - PullRequest
0 голосов
/ 06 января 2019

Я хотел бы смоделировать простую игру с бросанием монет: я бросаю (справедливую) монету определенное количество раз и хочу подсчитать, сколько голов я получу в общей сложности. Позвольте мне обозначить количество раз, которое я бросаю монету, и j количество голов, которые я получаю. Пусть 0 представляет головы, а 1 - хвосты.

{
    int j = 0;

    srand(time(nullptr));
    for (int i = 0; i < 3; i++)
    {
        cout << rand() % 2 << endl;
        if (rand() % 2 == 0)
        {
            j = j + 1;
        }
    }
    cout << j << endl;
    return 0;
}

Однако выходное значение для j не соответствует ожиданиям; скажем, я получаю 111 (то есть три хвоста), тогда я ожидал бы j = 0; однако то, что фактически создается, отличается и меняется каждый раз, когда я компилирую (скажем, я получаю j = 2, в следующий раз j = 1 и т. д.).

1 Ответ

0 голосов
/ 06 января 2019

Проблема во фрагменте

    cout << rand()%2 << endl;
    if (rand() % 2 == 0) {

Вы звоните rand() дважды, поэтому отображаемый номер и номер, используемый для if, не совпадают. Попробуйте

    r=rand();
    cout << r%2 << endl;
    if (r % 2 == 0) {

после объявления r

EDIT

Просто чтобы прояснить это: присваивание переменной должно быть сделано ВНУТРИ цикла, как в

for (int i = 0; i < 3; i++)
{
    r=rand();
    cout << r%2 << endl;
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...