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

Rand() возвращает тот же номер при каждом запуске программы

В этом довольно базовом фрагменте кода на С++, включающем генерацию случайных чисел:

include <iostream>
using namespace std;

int main() {
    cout << (rand() % 100);
    return 0;
}

Почему я всегда получаю вывод из 41? Я пытаюсь получить его для вывода случайного числа от 0 до 100. Может быть, я не понимаю, как работает функция rand?

4b9b3361

Ответ 2

Вам нужно изменить seed.

int main() {

    srand(time(NULL));
    cout << (rand() % 101);
    return 0;
}

Значение для посева srand истинно также для кода языка c.


См. также: http://xkcd.com/221/

Ответ 3

Для чего стоит вы также генерируете числа от 0 до 99 (включительно). Если вы хотите генерировать значения от 0 до 100, вам понадобится.

rand() % 101

в дополнение к вызову srand(), как упоминалось другими.

Ответ 4

Вы не посеяли номер.

Используйте это:

#include <iostream>
#include <ctime>

using namespace std;

int main()
{
    srand(static_cast<unsigned int>(time(0)));
    cout << (rand() % 100) << endl;
    return 0;
}

Вам нужно всего лишь семять его. В основном не засевают его каждое случайное число.

Ответ 5

srand() помещает генератор случайных чисел. Без семян генератор не может генерировать числа, которые вы ищете. До тех пор, пока необходимость в случайных числах не является критичной для безопасности (например, любой криптографией), обычной практикой является использование системного времени в качестве семени с использованием функции time() из библиотеки <ctime> как таковой: srand(time(0)). Это запустит генератор случайных чисел с системным временем, обозначенным как временная метка Unix (т.е. Количество секунд с даты 1/1/1970). Затем вы можете использовать rand() для генерации псевдослучайного числа.

Вот цитата из повторяющегося вопроса:

Причина в том, что случайное число, генерируемое функцией rand(), не является фактически случайным. Это просто трансформация. Википедия дает лучшее объяснение значения генератора псевдослучайных чисел: детерминированный генератор случайных бит. Каждый раз, когда вы вызываете rand(), он принимает семя и/или последнее случайное число сгенерировано (стандарт C не указывает алгоритм используется, хотя С++ 11 имеет возможности для определения некоторых популярных алгоритмов), работает математическая операция над этими числами и возвращает результат. Поэтому, если состояние семени одинаково каждый раз (так, как если бы вы не вызывали srand с поистине случайное число), тогда вы всегда будете получать одинаковые "случайные" номера.

Если вы хотите узнать больше, вы можете прочитать следующее:

http://www.dreamincode.net/forums/topic/24225-random-number-generation-102/

http://www.dreamincode.net/forums/topic/29294-making-pseudo-random-number-generators-more-random/

Ответ 6

случайные функции, такие как borland complier

using namespace std;

int sys_random(int min, int max) {
   return (rand() % (max - min+1) + min);
}

void sys_randomize() {
    srand(time(0));
}