Не работает код, запутался в циклах
Хочу написать программу, которая будет радномизировать 20 чисел и вносить их в массив (по одному числу в одну ячейку массива), но при этом в массиве не должно быть повторяющихся чисел. Как результат я хочу увидеть 20 разных чисел, но ничего не происходит. Мне кажется что проблема находится где-то после 11-й строки. Функции rand и srand проверял, со стандартной библиотекой c++ они работают. Скорее всего код вам покажется плохим, но я был бы очень признатален если вы мне поможете. Решил проблему таким образом
using namespace std;
int main ()
{
int SIZE = 20;
int arr[SIZE];
srand (time (NULL));
bool value;
int i, j;
value = true;
for (i = 0; i < SIZE; i++)
{
while (value = true)
{
arr[i] = rand () % 20;
if (i > 0)
{
for (j = i; j >= 0; j--)
{
if (arr[i] = arr[j])
{
value = true;
}
}
}
}
cout << arr[i] << "\n";
}
return 0;
}
Ответы (1 шт):
Вложенные циклы не желательны. Вот алгоритм где цифры просто перемешиваются за один цикл - не нужно никаких сравнений уникальности. Код выглядит короче и понятнее;
#include <iostream>
using namespace std;
#define SIZE 20
int main () {
int i, arr[SIZE];
srand (time (NULL));
for (i = 0; i < SIZE; i++) arr[i] = i; // [0...SIZE-1]
for (i = 0; i < SIZE; i++){
int t = arr[0]; // временно сохраняем число arr[0]
int idx = rand() % SIZE; // генерим случайный индекс
arr[0] = arr[idx]; // из arr[idx] число помещаем в arr[0]
arr[idx] = t; // в arr[idx] число из [0]
}
for (i = 0; i < SIZE; i++) cout << arr[i] << endl;
return 0;
}