ЗАДАЧИ
problems.ru |
О проекте
|
Об авторах
|
Справочник
Каталог по темам | по источникам | |
|
Задача 98824
УсловиеНапечатать все перестановки чисел 1..n (то есть последовательности длины n, в которые каждое из этих чисел входит по одному разу).РешениеПерестановки будем хранить в массиве x[1]..x[n] и печатать в лексикографическом порядке. (Первой при этом будет перестановка{<x[1]...x[n]> <> <n...2,1>} k:=n-1; {последовательность справа от k убывающая: x[k+1]>...>x[n]} while x[k] > x[k+1] do begin | k:=k-1; end; {x[k] < x[k+1] > ... > x[n]} t:=k+1; {t <=n, все члены отрезка x[k+1] > ... > x[t] больше x[k]} while (t < n) and (x[t+1] > x[k]) do begin | t:=t+1; end; {x[k+1] > ... > x[t] > x[k] > x[t+1] > ... > x[n]} ... обменять x[k] и x[t] {x[k+1] > ... > x[n]} ... переставить участок x[k+1] ... x[n] в обратном порядке Замечание. Программа имеет знакомый дефект: если t=n, то
x[t+1] не определено.
Источники и прецеденты использования |
© 2004-...
МЦНМО
(о копирайте)
|
Пишите нам
|