Cod sursa(job #458072)

Utilizator danalex97Dan H Alexandru danalex97 Data 22 mai 2010 20:30:38
Problema Combinari Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.22 kb
{3. sa se tipareasca toate combinarile 1..n luate cate p}
program permutare;
type stiva=array[1..100] of integer;
var st:stiva;
    n,k,p:integer;
    as,ev:boolean;
    var f,g:text;

procedure citire;
begin
  assign(f,'combinari.in');
  reset(f);
  readln(f,n,p);
  close(f);
end;

procedure init;
begin
  st[k]:=0;
end;

procedure succesor;
begin
  if st[k]<n then
    begin
      as:=true;
      st[k]:=st[k]+1;
    end
  else
    as:=false;
end;

procedure valid;
var i:integer;
begin
  for i:=1 to k-1 do
    if (st[i]=st[k]) or (st[i]>st[i+1]) then
      begin
        ev:=false;
        exit;
      end;
  ev:=true;
end;


function solutie:boolean;
begin
  solutie:=k=p;
end;

procedure tipar;
var i:integer;
begin
  for i:=1 to k do
    write(g,st[i],' ');
  writeln(g);
end;

begin
  assign(g,'combinari.out');
  rewrite(g);
  citire;
  k:=1;
  init;
  while k>0 do
    begin
      repeat
        succesor;
        if as then valid;
      until (as and ev) or not as;
      if as then
        if solutie then
          tipar
        else
          begin
            inc(k);
            init;
          end
      else
        dec(k);
    end;
  close(g);
end.