Cod sursa(job #1113644)

Utilizator sulzandreiandrei sulzandrei Data 20 februarie 2014 19:48:12
Problema Combinari Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.18 kb
program combinari;
type stiva=array[1..18] of integer;
var st:stiva;
k,n,p:1..18; 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.