• Предмет: Информатика
  • Автор: sapognikovalexei
  • Вопрос задан 1 год назад

Даю 20баллов!!! Только на C++!!!!!

Количество разбиений на слагаемые

Дано натуральное число 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

В помощь видео!!!!
youtube
/watch?v=MrdTbJ5zKsQ

Ответы

Ответ дал: kykareeky
2

Ответ:

#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;

}

Объяснение:

удачи на сириусе))))


kykareeky: скинь вк
oooooooooooooooo10: crbym gkbp
oooooooooooooooo10: скинь плиз
oooooooooooooooo10: 555
oooooooooooooooo10: ща
oooooooooooooooo10: id499687214
oooooooooooooooo10: так ты сделал 5
kykareeky: сейчас скину
oooooooooooooooo10: сюда кидай ок
kykareeky: #include

#include

using namespace std;

void hanoi(int n, int f, int t) {

if (n == 0) {

return;

}

int v = 6 - f - t;

hanoi(n - 1, f, v);

cout << n << " " << f << " " << t << endl;

hanoi(n - 1, v, t);

}

int main(){

int n ;

cin >> n ;

hanoi(n, 1 ,3);

return 0;

}
Вас заинтересует