Проблема с кодом здесь:
for(int i=0;i<len;i++)
{
srand (time(NULL));
cout <<(test[i]=rand()%10);
}
Вопрос заключается в том, что на каждой итерации цикла, вы перезаполнения рандомизации с текущим временем системы, как правило, измеряется на второй точности. Каждый раз, когда вы предоставляете семя рандомизатору, он сбрасывает последовательность случайных значений, которые возвращаются, и поэтому, если вы продолжаете посеять рандомизатор с одинаковым значением снова и снова, а затем вызываете только rand
один раз каждый раз, когда вы его обновляете, вернем одну и ту же последовательность случайных чисел снова и снова. Поскольку системное время изменяется только один раз в секунду, это приведет к повторному отображению той же последовательности чисел.
Чтобы это исправить, переместите вызов srand
из петли, как показано здесь:
srand (time(NULL));
for(int i=0;i<len;i++)
{
cout <<(test[i]=rand()%10);
}
Таким образом, вы только засеять рандомизации один раз, и поэтому ваша последовательность должна выглядеть более псевдослучайной. Вы все еще можете видеть некоторые повторяющиеся значения, но это будет обусловлено случайным, а не генератором случайных чисел, действующим детерминистически.
Этот вопрос задан в миллион раз. Точный дубликат. – abelenky