Достаточно одного случайного вызова.
Если вы хотите выбрать подмножество из 5 уникальных номеров в диапазоне 1-n, выберите случайное число от 1 до (n выберите r).
Сохраните отображение 1-1 от 1 до (n выберите r) для набора возможных 5 подмножеств элементов, и все готово.Это отображение является стандартным и может быть найдено в Интернете, например, здесь: http://msdn.microsoft.com/en-us/library/aa289166%28VS.71%29.aspx
В качестве примера:
Рассмотрим проблему генерации подмножества из двух чисел из пяти чисел:
Возможные 2 подмножества элемента {1, ..., 5}:
1. {1,2}
2. {1,3}
3. {1,4}
4. {1,5}
5. {2,3}
6. {2,4}
7. {2,5}
8. {3,4}
9. {3,5}
10. {4,5}
Теперь 5 выберите 2, это 10.
Итак, мы выбираем случайное число изС 1 по 10. Скажем, мы получили 8. Теперь мы генерируем восьмой элемент в приведенной выше последовательности: это дает {3,4}, поэтому вам нужны два числа: 3 и 4.
Страница MSDN, на которую я ссылалсядо, показывает вам метод для генерации набора, учитывая номер.то есть, учитывая 8, он возвращает набор {3,4}.