1

Тема: Допоможіть з С, питання типу "як зробити"

Підкажіть, будь ласка, як в масиві задати певну послідовність чисел в рандомному порядку, але без повторів.

2 Востаннє редагувалося Chemist-i (15.11.2014 23:32:39)

Re: Допоможіть з С, питання типу "як зробити"

Як варіант можна перевіряти, чи було вже таке число, але це не ефективно, краще заповнити масив послідовними числами 0,1,2,3...n, а потім зробити n рандомних замін
a[ i ] <=> a[ j ],
де і йде послідовно, а j обирається рандомно.

x
Подякували: koala1

3

Re: Допоможіть з С, питання типу "як зробити"

Chemist-i написав:

Як варіант можна перевіряти, чи було вже таке число, але це не ефективно, краще заповнити масив послідовними числами 0,2,3...n, а потім зробити n рандомних замін
a[ i ] <=> a[ j ],
де і йде послідовно, а j обирається рандомно.

а це не можна якось записати через ф-ію rand()? я намагався заповнювати елементи матриці через цикл за допомогою ф-ії rand(), але там повторюються числа

4

Re: Допоможіть з С, питання типу "як зробити"

Шукати пробували?

5

Re: Допоможіть з С, питання типу "як зробити"

chygaistr написав:

а це не можна якось записати через ф-ію rand()? я намагався заповнювати елементи матриці через цикл за допомогою ф-ії rand(), але там повторюються числа

Залежить від того, що ви маєте на увазі під "через ф-ію rand()". Якщо якийсь хитрий вираз за участі rand() - то ні,  функція фізично не може запам'ятати всі значення, які вона вже повернула (для цього знадобиться 16ГБ при 32-бітних числах). Але в процедурі, описаній паном Chemist-i, використовується rand() - там, де він пише про "рандомний вибір". До речі, випадкове число j має бути від i до n-1, інакше будуть артефакти тасування.
Якщо ж вам треба не тасувати, а наприклад, отримати 1000 унікальних чисел від 0 до 1000000 - то справа трохи інша.

Подякували: Chemist-i, Skyzerks Synx2