На С++! Количество разбиений на слагаемые
Дано натуральное число N. Найдите количество его разбиений на натуральные слагаемые. Два разбиения, отличающиеся только порядком слагаемых, будем считать за одно.
Например, для N=5 существует 7 различных разбиений:
5=5
5=4+1
5=3+2
5=3+1+1
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
Входные данные
Задано единственное число N≤30.
Выходные данные
Выведите количество различных разбиений на слагаемые.
Примеры
Ввод
Вывод
5
7Количество разбиений на слагаемые
Дано натуральное число N. Найдите количество его разбиений на натуральные слагаемые. Два разбиения, отличающиеся только порядком слагаемых, будем считать за одно.
Например, для N=5 существует 7 различных разбиений:
5=5
5=4+1
5=3+2
5=3+1+1
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
Входные данные
Задано единственное число N≤30.
Выходные данные
Выведите количество различных разбиений на слагаемые.
Примеры
Ввод
Вывод
5
7
Answers & Comments
Ответ:
#include <stdio.h>
int d[100][100];
int dec(int n, int k) {
if ( n >= 0 && k >= 0 && d[n][k] > 0 ) return d[n][k];
if ( n < 0 ) return 0;
if ( n <= 1 || k == 1 ) return 1;
d[n][k] = dec(n, k-1) + dec(n-k, k);
return d[n][k];
}
int main() {
int m, i, j;
scanf("%d", &m);
for (i = 0; i < m; i++) {
for (j = 0; j < m; j++) {
d[i][j] = -1;
}
}
printf("%d\n", dec(m, m));
return 0;
}
Объяснение:
там в комментариях почему-то не правильно вышло