Pagini recente » Cod sursa (job #809506) | Cod sursa (job #1571490) | Cod sursa (job #2466730) | Rating Surdu Ioan Alexandru (SurduCiprian) | Cod sursa (job #1113636)
program combinari;
type stiva=array[1..50] of integer;
var st:stiva;
k,n,p:integer; f:text;
ev,as:boolean;
procedure init(k:integer; var st:stiva);
begin
st[k]:=0;
end;
procedure tipar(k:integer; st:stiva);
var i:integer;
begin
for i:=1 to p do write(f,st[i],' ');
writeln(f);
end;
function solutie(k:integer):boolean;
begin
if k=p then solutie:=true
else solutie:=false;
end;
procedure valid(k:integer; st:stiva; var ev:boolean);
var i:integer;
begin
ev:=true;
for i:=1 to k-1 do if st[i]=st[k] then ev:=false;
if (k>1) and (st[k]<st[k-1]) then ev:=false;
end;
procedure suc(k:integer; var st:stiva; var as:boolean);
begin
if (st[k]<(n-p+k)) then begin st[k]:=st[k]+1; as:=true; end
else as:=false;
end;
begin
assign(f,'combinari.in'); reset(f);
read(f,n); readln(f,p); close(f);
assign(f,'combinari.out'); rewrite(f);
k:=1;
init(k,st);
while k>0 do begin
repeat
suc(k,st,as);
if as then valid(k,st,ev);
until (not as) or (as and ev);
if as then if solutie(k) then tipar(k,st)
else begin k:=k+1; init(k,st); end
else k:=k-1;
end;
close(f);
end.