Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рулик
8 / 8 / 0
Регистрация: 14.11.2011
Сообщений: 54
#1

Рекурсия, разложение на слогаемые - C++

11.01.2012, 05:51. Просмотров 468. Ответов 1
Метки нет (Все метки)

Нужно подсчитать количество возможных разложение числа на сумму слагаемых количеством больше двух.
Мы водим число и получаем количество представлений.
p(1) = 1
p(2) = 2
p(3) = 3
p(4) = 5
p(5) = 7
p(6) = 11
p(7) = 15
p(8) = 22
p(9) = 30
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int N,K=0;
int number(int);
void main(){
    setlocale(0,"");
    do{
        cout<<"Введите число - ";
        cin>>N;
        if(N<=0)
            cout<<"\nЧисло должно быть больше нуля\n";
    }while(N<=0);
    if(N<=1)
        cout<<"Число нельзя разложить на слогаемые";
    else
        cout<<"Количество представлений ="<<number(N)<<endl;
    system("pause");
}
 
int number(int N){
    int M=0,K=0;
    while(N>=M){
    N--;
    M++;
    K++;
        if(M<N){
            if(N>1)
                K+=number(N);
            if(M>1)
                K+=number(M);
        }   
    }
    return K;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2012, 05:51     Рекурсия, разложение на слогаемые
Посмотрите здесь:

LU-разложение - C++
Решить матрицу методом LU. матрицы задаются рандомно и выводятся на экран, если можно с коментами #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; ...

LU Разложение - C++
Есть код. #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; void LU(vector &lt;vector &lt;double&gt;&gt; A, vector &lt;vector...

LU разложение матрицы - C++
хотел написать программу для LU разложения матрицы. взял формулы с вики , не правильно находит элемент (3,3) в матрице U. (пробовал...

Разложение числа - C++
вот написал прогу которая которая должна разложить число N на множители по массиву M и К где М {1,5,10,50,100} а К мы должны сами найти....

Разложение на слагаемые - C++
На входе у нас число (нат, пол) которое нужно разложить и ожидаймое количество слагаймых алгоритм решения таков..выделяем место для...

Разложение в ряд S(x) и Y(x) - C++
Всем привет! Необходимо вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) для x изменяющихся от xn до xk с...

Разложение в ряд. - C++
Нужна помощь.Вычисление логарифма по основанию два вещественного числа...дан ряд n(x+1)=x-x^2/2+x^3/3-.....x^n/n - разложение натурального...

разложение тангенса - C++
Бодрого утра....вот не могу справиться с ошибками...буду очень благодарна, кто поможет... #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

Разложение на слагаемые - C++
Подскажите идею для написания программы, желательно с рекурсией: Дано натуральное число n. Небходимо вывести все возможные варианты...

Разложение в ряд - C++
#include &lt;stdio.h&gt; #include &lt;math.h&gt; int main () { double a,b,x,k; //k - to4noe printf(&quot;BBegute x\n&quot;); scanf(&quot;%lf&quot;,&amp;x); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.01.2012, 08:26     Рекурсия, разложение на слогаемые #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
 
using namespace std;
 
int N,K=0;
int number(int, int);
void main(){
        setlocale(0,"");
        do{
                cout<<"Ââåäèòå ÷èñëî - ";
                cin>>N;
                if(N<=0)
                        cout<<"\n×èñëî äîëæГ*Г® áûòü áîëüøå Г*óëÿ\n";
        }while(N<=0);
        if(N<1)
                cout<<"×èñëî Г*åëüçÿ Г°Г*çëîæèòü Г*Г* ñëîãГ*åìûå";
        else
                cout<<"Êîëè÷åñòâî ïðåäñòГ*âëåГ*ГЁГ© ="<<number(N, N)<<endl;
        system("pause");
}
 
int number(int N, int M){
    if(M==0)
        return 1;        
    if(M<0)
        return 0;
    int K=0;
    for(int i=N; i>0; i--)
        K+=number(i, M-i);
    return K;
}
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru