Cod sursa(job #219508)

Utilizator Adrian001Vladulescu Adrian Adrian001 Data 7 noiembrie 2008 08:39:59
Problema Combinari Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.25 kb
Type stiva=array[1..100] 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.

end.