Получение объекта по номеру
Перестановки
Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки. <source lang="c">
f[n]=n!
ans[n] //искомая перестановка
was[n] //использовали ли мы уже эту цифру в переставновке
for i = 1 to n do //n-это количество цифр в перестановке
alreadyWas = (numOfPermutation-1) div f[n-i]
numOfPermutation = (numOfPermutation-1) mod f[n-i] // сколько цифр уже полностью заняты предыдущими перестановками
//сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. AlreadyWas+1
for j = 1 to n do
if was[j] = false
then cntFree++
if cntFree = AlreadyWas+1
then ans[i] = j
was[j] =w true
</source>
Сочетания
for
do for to do for if then return