Лиза Сафронова
Лиза Сафронова

Генерация псевдослучаных неповторяющихся чисел в с++

Добрый день, уважаемые коллеги!
У в ходе выполнения одной работы у меня возникла следующая проблема. Мне надо сгенерировать массив псевдослучайных чисел от 1 до 16. При этом надо сделать его в двойном цикле: в первом генерирую число, во втором сравниваю это число с уже находящимися. Если они не совпадают, тогда вставляю в массив, ежели нет, тогда пытаюсь сгенерировать новое. Вопрос состоит в следующем: в моем коде я просто выхожу из второго цикла, а надо сделать так, чтобы счетчик i++ не увеличился и число не приравнивалось. Подскажите, как это лучше всего сделать?
int i;
system("CLS");
srand( time( NULL ) );

int a[16];

for (i=0;i<16; i++)
{
int c = 1 + rand() % 16;
for (int j=0; j = c;
if (a ==16)
{
cout<<' '<<

int a[16];

for (i=0;i<16; i++)
{
int c = 1 + rand() % 16;
for (int j=0; j = c;
if (a == 16)
{
cout<<' '<<

В с++ уже есть счетчик генерации случайных чисел. Алгоритм Кнута здесь совершенно не обязателен.

так, за код-спасибо огромное!

Понял=))) Я просто еще новичок в программировании, поэтому все для меня здесь ново=)))

РК
Роман Киселев

сгенерируйте масив с числами от 1 до 16. запустите цыкл от 1 до 16. сгенерируйте индекс по длине масива. выведете число по индексу. запишите на его место последее число масива. убавте длину масива на 1-цу. и ето все в цыкле.

АС
Александр Сергеевич

А зачем такой плохой способ генерации неповторяющихся случайных чисел? У Кнута есть гораздо лучшие.
Можно, конечно, и описанным у тебя топорным способом:

#include
#include
#include
using namespace std;
int main(){int a[16],c,i,j; bool b;
srand(time(NULL));
for(i=0;i< 16;i++){
do {b=false; c=1+rand()% 16;
for (j=0;j< i;j++)if(c==a[ j])b=true;} while(b);a[ i]=c;}
for(i=0;i< 16;i++)cout<< a[ i]<<' ';}

P.S. Я имел в виду у Кнута не алгоритм генерации псевдослучайных чисел, а алгоритм генерации НЕПОВТОРЯЮЩИХСЯ псевдослучайных чисел ЗАДАННОГО ДИАПАЗОНА. Такого ни в С, ни в С++ не вмонтировано. А у Кнута - есть.

ОГ
Ольга Гусева

а я так без Кнута делал так все время
#include
#include
#include

int main (void)
{
int a [16 ] = { 0 }, num = 1, val;

srand(time(NULL));
while (num != 17)
{
val = 1 + rand() % 16;
if (a[ val - 1 ] == 0)
a[ val - 1 ] = num++;
}

for (size_t i = 0; i < 16; i++)
printf("%d: %d\n",i + 1, a[ i ]);

system("pause > nul");
return 0;
}

Похожие вопросы
Помогите пожалуйста... Сколько существует различных четырехзначных чисел с неповторяющимися цифрами?
Генерация случайного код на PHP
кто знает учебники по генерации случайных чисел в turbo pascal
Помогите с программой генерации пароля.
И генерации случайных чисел в диапазоне от 1 до 1000 в 1000 в файл, в котором хранятся программы и введите эти цифры. но
какоеНаибольшееКоличество неповторяющихся чётных чисел, начиная с10можно сложить, чтобы получившаяся сумма была меньше300
составте как можно больше четырёхзначных чисел с цифрами 1,2,0,6 (цифры в числе неповторяются)
Генерация звука в с++
О принципах генерации.
что такое генерация чисел?