Cod sursa(job #220942)

Utilizator Adrian001Vladulescu Adrian Adrian001 Data 13 noiembrie 2008 20:10:05
Problema Combinari Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.29 kb
Type stiva=array[1..18] of integer;
var f,g:text;
    st:stiva;
    n,k,i,k1:integer;
    as,ev:boolean;

procedure init(var st:stiva;k:integer);
Begin
 st[k]:=0;
end;

 procedure succesor(var as:boolean;var st:stiva;k:integer);
 Begin
 If st[k]<n then Begin
                  st[k]:=st[k]+1;
                  as:=true;
                 end
            else as:=false;
 end;

 procedure valid(var ev:boolean;st:stiva;k:integer);
 Begin
 ev:=true;
 For i:=1 to k-1 do
  If st[i]=st[k] then ev:=false;
 For i:=2 to k do
  If st[k-1]>st[k] then ev:=false;
 end;

 function solutie(k:integer):boolean;
 Begin
 solutie:=(k=k1);
 end;

 procedure tipar;
 Begin
 For i:=1 to k do Write(g,st[i],' ');
 Writeln(g);
 end;

 Begin
 Assign(f,'combinari.in');Reset(f);
 Assign(g,'combinari.out');Rewrite(g);
 Read(f,n,k1);
 k:=1;
 init(st,k);
 While k>0 do
  Begin
   repeat
    succesor(as,st,k);
    If as then valid(ev,st,k);
   until (not as) or (as and ev);
   if as then Begin
               If solutie(k) then tipar
                             else Begin
                                   k:=k+1;
                                   init(st,k);
                                  end;
              end
         else k:=k-1;
  end;
Close(f);
Close(g);
end.