заполнить масив неповторяющимися числами с помощью Random()?

  • Автор темы Автор темы woka
  • Дата начала Дата начала
W

woka

ребята подскажите! мне надо зарандомировать матрицу. всмысле масив забить числами. но не всё так просто. надо чтобы эти числа были до определённого количества и не повторялись.
я придумал что то вроде этого чтобы заполнить масив
C++:
for (i=0;i<n;i++)
for (j=0;j<n;j++)
m[i][j]=random (15);
а вот чтобы проверить встречаются ли тут такие мыслей собственно почти не.
конечно можно было бы сделать несколько циклов чтобы они проверяли не ли нового элемента и вызывали опять рандом на этот элемент но это всё будет занимать много времени.
 
можно сделать так :
создать масив с неповторяющимися числами в нужны пределах (типа 5,6,7,8,9,10,11,12,13,14,15,16...)
хаотично перемешать масив
и истпользовать его вместо random();

Добавлено :
Код:
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
const int array_size = 15;
int array[ array_size ];
int t = 0;
int k = 0;
for (int i=0; i<array_size; ++i)
{
array[i]=i;
cout << " a[" << i <<"]="<< array[i];
}
cout << "\n";
srand(array_size-1);
for (int i=0; i<array_size; ++i)
{
k = rand() % (array_size-1);
t = array[i];
array[i] = array[k];
array[k] = t;
}
for (int i=0; i<array_size; ++i)
{
cout << " a[" << i <<"]="<< array[i];
}
return 0;
}
 
спасибо конечно но я уже нашёл выход из ситуации сделав заполнение этого массива из файла. я посчитал что так будет проще. да и кода в разы становиться меньше.
 
А в файле откуда случайные числа появляются?
 
Так это уже нельзя назвать случайными числами! А все (в том числе условие) гласит об обратном!!
 
Так это уже нельзя назвать случайными числами! А все (в том числе условие) гласит об обратном!!
да ладно...главно ТС решил свою проблему ;)
скорее всего ему просто было лень каждый раз при запуске программы заполнять матрицу руками
 
up
как видно несошлись(
после нескольких часов самопыток ничего толкового не придумав вспомнил про тему когда то созданую.
смотрел алгоритм уважаемого Dock1100 и не понимаю как он работает но факт что работает. не знаю буду пробовать разобраться если ничего проще не найду.
тут есть мысли чтобы сделать сначало обычное заполнение массива а потом по принцыпу поиска находить повторяющиеся.
 
не понимаю как он работает
Код:
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
const int array_size = 15;
int array[ array_size ];
int t = 0;
int k = 0;
for (int i=0; i<array_size; ++i) //заполняем масив последовательными числами от 0 до 14 и выводим их
{
array[i]=i;
cout << " a[" << i <<"]="<< array[i];
}
cout << "\n";
srand(0); //задаём начальное число для генератора случайных чисел
for (int i=0; i<array_size; ++i)
{
k = rand() % (array_size-1); //поскольку rand() возвращает числа от начального числа до максимума типа int, то результат необходимо преобразовать путём получения остатка от диления rand() на длину(в данном случае кол-во элементов в масиве) диапазона

//меняем местами два элемента: текущий и елемент со случайним номером
t = array[i];
array[i] = array[k];
array[k] = t;
}
for (int i=0; i<array_size; ++i) //выводим результат
{
cout << " a[" << i <<"]="<< array[i];
}
return 0;
}
 
:lovecodeby: я фигею! несколько раз прошёл по шагам тот кусок кода где он рандамирует и не пойму как это просходит.
блин! ну я и баран. :ya_lamo: он же его просто меняет местами!фак. спасибо большое. :lovecodeby:
у меня были идеи на этот счёт чтобы заполнить массив и потом уже разбрасать их, :lovecodeby: но не смог придумать как их потом раскидать. Спасибо!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!