Точно помню, что такое было на форуме, но поиск по всяким сочетаниям ничего не дал( Нужно вывести все возможные разложения числа N на слагаемые, без повторений (3+2 и 2+3 - повтор). Я сделал рекурсией разложение на слагаемые, но с повторениями. Как их избежать, ума не приложу.
{$APPTYPE CONSOLE}
var n:byte;
m:array[1..40] of byte;
Procedure rec(k,l:integer);
var i:integer;
begin
if (k=n) and (l>1) then begin
for i:=1 to l-1 do write(m[i],'+');
writeln(m[l]);
end else begin
for i:=1 to n do begin
if k+i<=n then begin
m[l+1]:=i;
rec(k+i,l+1);
end else break;
end;
end;
end;
begin
fillchar(m,40*sizeof(byte),0);
assign(input,'input.txt');
read(n);
assign(output,'output.txt');
rec(0,0);
end.
N<=40, на 40 этот код оччень долго работает, я не дождался. Наверное, надо отсекать повторы ещё при разложении.