Re: Заполнить массив
От: frogkiller Россия  
Дата: 03.02.10 12:25
Оценка: 53 (9)
Здравствуйте, andrey.desman, Вы писали:

AD>Вот такую задачку получил недавно на собеседовании:

AD>Есть неинициализированный массив из 100 чисел. Дана функция rand(n), которая генерирует случайное число в диапазоне [0, n].

AD>Заполнить массив числами [0, 99] в случайном порядке так, чтобы числа не повторялись.


AD>Как это можно сделать?


Посмотри, как работает типичная реализация std::random_shuffle. И мы точно знаем, что на i-м месте будет стоять число i, поэтому перемешивание можно совместить с инициализацией. Получится как-то так:

for (int i = 1; i < n - 1; ++i ) {
   int j = rand(i);
   a[i] = a[j];
   a[j] = i;
}


ЗЫ. твоё решение с 50-ти индексами, кстати, не будет обладать свойством равномерности распределения
Курица — это инструмент, с помощью которого одно яйцо производит другие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.