В комбинаторной математике, спаривание Лангфорда, также называемое последовательностью Лэнгфорда, является перестановкой последовательности 2n
numbers 1, 1, 2, 2, ..., n,
n, в котором эти две единицы разделены на одну единицу друг от друга, два двое являются двумя единицами друг от друга, и, в более общем случае, две копии каждого числа k составляют k единиц.
Например:
Спаривание Лэнгфорда для n = 3
задается последовательностью 2,3,1,2,1,3.
- Что такое хороший метод для решения этого вопроса в
haskell
илиC
- Можете ли вы предложить алгоритм его решения (не хотите использовать грубую силу)?
-------------------------- EDIT ----------------- -----
Как мы можем определить математические правила, чтобы поместить код @Rafe в haskell