Вот пара примеров в псевдокоде, чтобы показать, что я имею в виду.
В результате получается комбинация (выборки без учета порядка без повторений) из 1, ..., n по 3.
Do[Print[i,j,k], {i,1...n-2}, {j,i+1...n-1}, {k,j+1...n}]
Цикл работает слева направо - для каждого i итератор j просматривает свои значения, а для каждого j итератор k проходит через его. Добавляя больше переменных и меняя n, мы можем обобщить то, что имеем выше.
Вопрос: можем ли мы сделать то же самое для перестановок? Другими словами, можем ли мы найти способ настроить итераторы для получения P (n, k) = n! / (P-k)! перестановки 1, ..., п? Для k = 3
Do[Print[i,j,k], {i, f_1 , g_1(i,n)}, {j, f_2(i), g_2(i,j,n)}, {k, f_3(i,j), g_3(i,j,k,n)}]
Используйте только основные арифметические операции и такие вещи, как модульная арифметика, функции пола / потолка.
Поскольку это может пахнуть для вас домашним заданием, я бы остановился на ответе «да» или «нет»; Ваша оценка уровня сложности также будет полезна для меня.
Спасибо.