програма з числами

Алгоритмы: от сортировки пузырьком до численных методов

Модераторы: C_O_D_E, DeeJayC

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

17 мар 2010, 11:57

Помогите пожалуста
задание
Перечислить все возростающие последовательности длины 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 :=x[i-1]+1;
}
end;
Ответить