program rozklad; const MAX = 100; type CISLO = 1..MAX; function poc_rozkladu(N:cislo): integer; { pocita pocet rozkladu cisla N na mensi scitance } var A : array [CISLO] of integer; Act, { index na nemz se provadi zmeny } Konec, { posledni index rozkladu } { cisla A[Act+1] .. A[Konec] jsou rovna 1 } Pocet, { pocet dosud zjistenych rozkladu } Zbyva : integer; { cislo, ktere zbyva rozlozit } { procedura tisk pro ladeni } { procedure tisk; const F = 3; var I:integer; begin write(Pocet:5,':', A[1]:F); for I:=2 to Konec do write(A[I]:F); writeln; end; } begin Pocet:=0; A[1]:=N; Act:=1; Konec:=1; while A[1]<>1 do begin while A[Act]=1 do Act:=Act-1; { umazani jednicek } Zbyva:=Konec-Act+1; { 1 + kolik 1 ubylo } A[Act]:= A[Act]-1; { zmenseni aktualni pozice } while Zbyva>0 do begin Act:=Act+1; A[Act]:=A[Act-1]; { rozsireni pole scitancu } Zbyva:=Zbyva-A[Act]; end; if Zbyva<0 then { kolik jsme vzali navic } A[Act]:=A[Act]+Zbyva; Konec:=Act; { novy konec pole rozkladu } Pocet:=Pocet+1; { dalsi rozklad } { tisk; } { ladici tisk } end; poc_rozkladu:=Pocet; end; var N : integer; K : integer; begin readln(N); K:= poc_rozkladu(N); writeln('Pro cislo ', N:3, ' existuje ', K:5, ' rozkladu'); end.