C ++ генерирует случайные числа-1 - PullRequest
0 голосов
/ 01 марта 2012
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 ]

3 голосов
/ 01 марта 2012

Операция по модулю 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 ++?

0 голосов
/ 01 марта 2012

на этот тип вопросов отвечали n раз.

посмотрите на это

0 голосов
/ 01 марта 2012
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; 
  } 
} 
0 голосов
/ 01 марта 2012

rand() % 10 обычно делает трюк для меня .. (если я чего-то не хватает)

0 голосов
/ 01 марта 2012

Похоже, вам нужно полностью понять, а затем изменить эту строку

random_integer = (rand() % range) + lowest/(RAND_MAX + 1.0);
...