Подтвердить что ты не робот

Случайное логическое значение

Я пытаюсь создать случайный int, который равен 0 или 1 в С++. Прямо сейчас, я получаю 0 каждый раз, когда я запускаю этот код, и я не уверен, почему. В чем проблема?

#include <ctime>
#include <cstdlib>

srand(time(0));
int randomval = rand() % 2;
cout << randomval << endl;
4b9b3361

Ответ 1

Это называется неудачей. Повторите попытку.

Ответ 2

Я знаю, что это более старый вопрос, но я считаю, что это правильно отвечает на вопрос.

Не перемножайте генератор при каждом запуске этого кода.

Высевая его до одного значения каждый раз, вы просто получите тот же "случайный" номер. Помните, что это генератор псевдослучайных чисел, поэтому, основываясь на начальном значении, будет генерироваться "случайное" число. Поэтому, если вы засеваете его с одинаковым номером каждый раз, когда вы просто получите одинаковое число каждый раз.

Решение заключается в вызове srand (time (NULL)) только один раз в вашей программе. Затем каждый вызов rand() будет давать вам разное число каждый раз.

Ответ 3

По теории, вероятность 50% вы получите 0, а 50 - 1. Вы можете попробовать с другим модулем - например, 100, чтобы проверить, работает ли это. И я уверен, что это так.

Вы только что запустили этот код несколько раз, недостаточно.

Другая идея протестировать его:

srand(time(0));
for( int i = 0; i < 1000000; ++i )
{
    assert( 0 == ( rand() % 2 ) );
}

Ответ 4

Я хотел бы добавить, что при использовании srand(time(0)); "случайное число" всегда будет одинаковым в одну секунду. Когда я попытался запустить вашу программу 10000 раз и сгруппировал ее с помощью uniq, я увидел, что число не изменится в течение секунды.

for i in `seq 1 10000`; do ./a.out; done | uniq -c
    693 0
   3415 1
    675 0
    673 1
    665 0
    674 1
    668 0
    711 1
    694 0
    673 1
    459 0

Ответ 5

Вы ничего не проверяете. Использование:

#include <ctime>
#include <cstdlib>

srand(time(0));
int randomval = rand() % 2 == 0;
cout << randomval << endl;

Ответ 6

Вызов srand(time(NULL)); только один раз.

Затем используйте такой цикл, вы всегда будете получать 0 или 1 таким образом.

#include <stdio.h>
#include <stdlib.h>

srand(time(NULL));

for (i=0;i<10;i++)
{
    printf("%d\n",rand() % 2);
    i++;
}

return 0;