С++, двадцать чисел не случайны?

Почему мои числа C++ не случайны?

#include <iostream>
#include <cstdlib>
using namespace std;


int main()
{
    int randomNumber = rand() % 100;


    for (randomNumber = 0; randomNumber < 20; randomNumber++)
    {

        cout << randomNumber << endl;
    }
    return 0;
}

//Why are my 20 numbers not random?

person user242229    schedule 29.01.2010    source источник


Ответы (5)


Вам нужно вызывать rand() каждый раз, когда вам нужно случайное число. Как у вас сейчас, вы генерируете одно случайное число, затем увеличиваете его и печатаете 20 раз, так что вы получите 20 последовательных чисел.

Попробуйте что-то вроде

srand(time(NULL)); // Seeding the random number generator

for(int i=0; i<20; ++i)
{
    cout << (rand() % 100) << endl;
}

Заполнение генератора случайных чисел важно, без него вы бы генерировали одни и те же числа при каждом запуске программы.

person Graphics Noob    schedule 29.01.2010
comment
Обратите внимание, что обычно не рекомендуется просто использовать модуль для получения случайного числа в желаемом диапазоне. - person Trent; 29.01.2010
comment
это, вероятно, тема, которую лучше сохранить для другого вопроса SO, но... Аргумент заключается в том, что результаты использования модуля распределяются неравномерно. Вот две ссылки: stackoverflow. com/questions/288739/ и cplusplus.com/reference/clibrary/ cstdlib/ранд - person Trent; 29.01.2010

Вы присваиваете randomNumber случайное значение, а затем перезаписываете его числами от 0 до 19 в цикле for. Перед циклом у вас есть случайное число.

person Wooble    schedule 29.01.2010

Вам нужно правильно заполнить ваш генератор случайных чисел, а затем вам нужно повторно вызвать rand(), чтобы получить новое случайное число.

Например:

srand(time(NULL));
for (int randomNumber = 0; randomNumber < 20; randomNumber++) 
{ 

    cout << (rand() % 100) << endl; 
} 
person Michael    schedule 29.01.2010

Вам нужно использовать функцию time() в качестве семени в srand(), а затем использовать rand().

srand(time(NULL));

Кстати, вы не печатаете результат rand(), используйте его после вызова srand:

for (int i= 0; i < 20; i++)
{
    int randomNumber = rand() % 100;
    cout << randomNumber << endl;
}
person Alex LE    schedule 29.01.2010

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    for (int i = 0; i < 20; i++)
    {
        int randomnumber = rand() % 100;
        cout << randomNumber << endl;
    }
    return 0;
}

P.S. Надеюсь это шутка :(

person Kaleb Brasee    schedule 29.01.2010