|
Перемена мест слагаемых
Дана задача
Раздепить целочисленный отрезок на целочисленные отрезки.
Например: отрезок длиной 4 можно представить как
1+1+1+1
1+1+2
1+2+1
2+1+1
2+2
1+3
3+1
4
Всего 8 вариантов.
Написать программу на Паскале, генерирующую такие упорядоченные разложения на слагаемые в виде строк в выходном файле.
Я пытался решить эту задачу редактируя следующую программу
uses crt;
procedure ViewSumms(N : Integer);
var List : array [byte] of byte;
CountVariants : longint;
procedure _ViewSumms(k, Count, max : longint);
var S : String;
i : Integer;
f : text;
begin
Assign(f, 'c11.txt'); ReWrite(f);
for i := 0 to Count - 1 do begin
Write(f, List[i] : 3);
if i < Count -1 then Write(f, ' ') else WriteLn;
end;
inc(CountVariants);
while (List[k] < max) and (k < (Count-1)) do begin
dec(Count); inc(List[k]);
_ViewSumms(k + 1, Count, List[k]);
end;
Close(f);
end;
begin
if (N < 1) or (N > 255) then exit;
FillChar(List, sizeOf(List), 1);
CountVariants := 0;
_ViewSumms(0, N, N);
WriteLn('Bcego BapuaHToB: ', CountVariants);
end;
var N : Integer;
f : text;
s : string;
begin
ClrScr;
Write(' N = ');ReadLn(N);
ViewSumms(N);
ReadLn;
end.
Но у меня ничего не получается.
Помогите, пожалуйста
|