(вы задали это как вопрос по математике / алгоритму, поэтому я дам математический ответ, а не готовую программу на C :), наслаждайтесь кодированием - и задайте здесь вопрос, если вы застряли)
Проще говоря, вы хотите сгенерировать список из M чисел (x позиций для M платформ, в вашем случае) в диапазоне 0..N-1, чтобы все эти числа были разными. Очевидно, М <Н. </p>
Для первого у вас есть N возможных вариантов, для второго у вас есть N-1 выбор (один из которых взят), для третьего N-2 и т. Д.
Есть много способов сделать это, но вот простой:
заполнить массив из N целых чисел числами 0..N-1 (чтобы a[i] == i
для всех значений i
).
Теперь установите n = N-1 и сделайте это M раз:
- взять случайное число r в диапазоне (0..n) и использовать [r] в качестве следующего выбора
- удалить [r] из массива, сдвинув все от [r + 1] до конца на одну позицию.
- декрет n (
n--
)
(каждый раз цикл будет выбирать из списка, в котором все меньше и меньше чисел, причем именно те, которые были выбраны до исключения)