програма з числами (лексографичиской порядок)

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
topo
Сообщения: 20
Зарегистрирован: 17 мар 2010, 11:31

Помогите пожалуста
задание
Перечислить все возростающие последовательности длины k из чисел 1....n в лексографическом порядке. (Пример
при n=5, k=2 получаєм 12 13 14 15 23 24 25 34 35 45)

Решение
Минимальной будет последовательность (12...k); максимальной ((n-k+1)...(n-1)n). s-й член последовательности можна увеличивать если он меньше n-k+s. После увеличения s-го элемента все следующие должны возростать с шагом 1.

Алгоритм

Код: Выделить всё

s:=n;
while not (x[s]<n-k+s) do begin
{
s:=s-1;
}
end;

// s - номер єлемента подлежащего увеличению

x[s]:=x[s]+1;
for  i := (s+1) to n do begin
{
x[i] :=x[i-1]+1;
}
end;
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

Приглашаю на свой блог о программировании: pro-prof.com
Ответить