C++ генерирует случайные числа-1
int main()
{
srand((unsigned)time(0));
int random_integer;
int lowest=0, highest=10;
int range=(highest-lowest)+1;
for(int index=0; index<20; index++){
random_integer = (rand() % range) + lowest/(RAND_MAX + 1.0);
cout << random_integer << endl;
}
}
Я получаю выходные данные от 0 до 10, 11 чисел, но я не хочу получать число 10, просто числа от 0 до 9, что означает 10 случайных чисел, что мне делать?
5 ответов
Операция по модулю x % c;
возвращает остаток от деления числа x
от c
, Если вы делаете x % 10
тогда есть 10
возможные возвращаемые значения: 0 1 2 3 4 5 6 7 8 9
,
Обратите внимание, что генерация случайных чисел с помощью rand()
с %
дает искаженные результаты, и эти числа не распределены равномерно. Вот простая функция в стиле C, которая генерирует случайное число из интервала min
в max
включительно:
int irand(int min, int max) {
return ((double)rand() / ((double)RAND_MAX + 1.0)) * (max - min + 1) + min;
}
Обратите внимание, что числа, сгенерированные этой функцией, распределены равномерно:
int occurences[8] = {0};
srand(time(0));
for (int i = 0; i < 100000; ++i)
++occurences[irand(1,7)];
for (int i = 1; i <= 7; ++i)
cout << occurences[i] << ' ';
выход: 14253 14481 14210 14029 14289 14503 14235
Также посмотрите на:
Создать случайное число в пределах диапазона?
Генерация случайных чисел равномерно по всему диапазону
Каков наилучший способ генерировать случайные числа в C++?
Похоже, что вам нужно полностью понять, а затем изменить эту строку
random_integer = (rand() % range) + lowest/(RAND_MAX + 1.0);
rand() % 10
обычно делает трюк для меня.. (если я что-то упускаю)
int main()
{
srand((unsigned)time(0));
int random_integer;
int lowest=0, highest=9;
int range=(highest-lowest)+1;
for(int index=0; index<20; index++){
random_integer = (rand() % range) + lowest;
cout << random_integer << endl;
}
}