1. 1 1 1 1//исходный массив
2. 1 1 2
3. 1 3
4. 2 2
5. 4
uses crt;
const nmax=120;
procedure Summ(N:integer);
var List : array [0..nmax] of byte;{вспомогательный массив для хранения значений слагаемых}
CountVariants : longint;{количество вариантов}
{вспомогательная рекурсивная процедура генерации разложений}
procedure Generate(k, Count, max:longint);{номер элемента, количество,максимальное значение=числу}
begin
{Текущее разложение}
inc(CountVariants);{первое разложение на единицы}
while (List[k] < max) and (k < (Count-1)) do{пока значение элемента меньше числа и его номер меньше количества элементов-1}
begin
dec(Count); inc(List[k]); {уменьшаем размер, переходим в следующий разряд влево, сумма не изменяется}
Generate(k+1, Count, List[k]);{генерируем следующее разложение}
end;
List[k] := 1;{снова в правую крайнюю ячейку}
end;
begin
if (N < 1) or (N > nmax) then exit;{больше 120 количество разбиений выходит за пределы типа}
FillChar(List, sizeOf(List), 1);{заполняем массив единицами}
CountVariants := 0;
Generate(0, N, N);{генерируем разбиения}
WriteLn('Всего вариантов: ', CountVariants);
end;
var N:integer;
begin
clrscr;
write('N=');readln(N);{Число, которое нужно разложить на слагаемые}
Summ(N);
ReadLn;
end.
Похожие записи/страницы:
- Найти max из чисел, встречающиеся в заданной матрице, более одного раза - Delphi(Делфи)
- Программа, находящая в строке подпалиндром максимальной длины - Pascal(Паскаль)
- Составить программу, вычисляющую сумму членов геометрической прогрессии до тех пор, пока сумма не превысит…
- Заданы две последовательности A1,A2, :, An и B1,B2,:,Bm. Рассмотрим таблицу Cij=Ai+Bj. Необходимо найти какие…
- Дан массив. Определить количество элементов, больших суммы всех элементов массива. и напечатать их номера-…
- Написать программу, которая вводит с клавиатуры непомерный массив из 5 целых чисел и выводит количество…
- Найти количество положительных элементов массива,используя рекурсию - Pascal(Паскаль)
- Имеется произвольный текстовый файл. Найти нужные символы (последовательность символов) и определить их позицию…