Задача: Генерирование всех k-элементных подмножеств множества {1,...,n} в лексикографическом порядке.
Данные: n, k. Результат: последовательность всех k-элементных подмножеств множества {1,...,n} в лексикографическом порядке.
Реализовать ниже код с tag:«Pascal» на tag:«C++»
var a,p:array[1..n1] of integer;
i,j,k,pp,min,n:integer;
flag:boolean;
begin
writeln ('Введите размерность множества от 1 до ',n1);
read (n);
for i:=1 to n do p[i]:=i; {Заполняем массив индексов}
a:=p; {На самом деле массив a может быть заполнен произвольно}
for i:=1 to n do write(a[p[i]]:4);{вывод первой перестановки}
writeln;
flag:=false;
repeat
i:=n;
repeat
i:=i-1
until (p[i]<p[i+1]) or (i=1);{шаг 1 выполнен}
if p[i]<p[i+1] then begin
k:=i;
repeat
k:=k+1;
until (k=n)or(p[k+1]<p[i]);
min:=k;
pp:=p[i];p[i]:=p[min];p[min]:=pp;{шаг 2 выполнен}
for k:=i+1 to (i+1+n) div 2 do begin
pp:=p[k]; {здесь делает перестановка}
p[k]:=p[n+i+1-k];
p[n+i+1-k]:=pp
end; {шаг 3 выполнен}
for i:=1 to n do write(a[p[i]]:4); {вывод перестановки}
writeln;
end
else flag:=true
until flag;
end.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости