Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
30.07.2016, 07:17

Нахождение разбиений числа - C++

30.07.2016, 07:17. Просмотров 335. Ответов 6
Метки (Все метки)

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef std::vector     < int           >   T_partition;
typedef std::vector     < T_partition   >   T_partitions;
///////////////////////////////////////////////////////////////////////////////
void    add_partitions
    (
        int                 num,
        int                 min,
        int                 max,
        T_partitions    &   partitions,
        T_partition         prefix  =   {}
    )
{
    if( !num )
    {
        partitions.emplace_back( prefix );
        return;
    }
 
    for (
            int
            i   =   std::max( 1,    min );
            i   <=  std::min( max,  num );
            ++i
         )
    {
        auto    prefix_cur          ( prefix );
        prefix_cur.emplace_back     (i);
 
        add_partitions
            (
                num - i,
                i,
                max,
                partitions,
                prefix_cur
            );
    }//for
}
///////////////////////////////////////////////////////////////////////////////
void    print_partitions( T_partitions  const   &   partitions )
{
    for( auto   const   &   partition   :   partitions )
    {
        std::copy
            (
                partition.begin             (),
                partition.end               (),
                std::ostream_iterator<int>  ( std::cout,    " " )
            );
        std::cout   <<  std::endl;
    }//for
    std::cout   <<  std::endl;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::cout   <<  "num\t= ";
    int     num{};
    std::cin    >>  num;
 
    std::cout   <<  "min\t= ";
    int     min{};
    std::cin    >>  min;
 
    std::cout   <<  "max\t= ";
    int     max{};
    std::cin    >>  max;
 
    T_partitions    partitions;
 
    add_partitions
        (
            num,
            min,
            max,
            partitions
        );
 
    if  (
            partitions.empty()
        )
    {
        std::cout   <<  "no solutions"
                    <<  std::endl;
    }
    else
    {
        print_partitions( partitions );
    }
}
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2016, 07:17
Готовые ответы и решения для C++ Нахождение разбиений числа:

Подсчитать количество различных разбиений числа N на натуральные слагаемые
Условие: требуется подсчитать количество различных разбиений числа N на...

Число разбиений на слагаемые C++
Подскажите, есть такая задача. По данному целому числу 1≤n≤1000 найдите число...

Задача на нахождение числа
Здравствуйте, есть задачка которую решить самому мне не посильно: Дано число Х...

Нахождение наименьшего числа (С++)
Здравствуйте. Всех с наступающим праздником. Нужно, чтобы программа...

Нахождение простого числа
У меня тут, по теории программа должна случайно сгенерировать случайные числа,...

Нахождение целого числа
Среди x1-x100 найти ближайшее к любому целому #include &lt;iostream&gt; #include...

6
Нахождение разбиений числа C++    
Другие темы раздела
C++ Взять элементы из определенного листа http://www.cyberforum.ru/cpp-beginners/thread1787463.html
list<int>route; vector<list<int>>routes; route.push_back(.) routes.push_back(route) for(int start = 0 ; start = routes.size();start++) { for().. for()..
C++ Построить латинский квадрат используя циклический сдвиг Написать программу для решения следующей задачи. построить латинский квадрат,используя циклический сдвиг. Латинский квадрат-матрица размером N x N, элементы которой равны 1,2..N и каждое число... http://www.cyberforum.ru/cpp-beginners/thread1787439.html
C++ Примерная реализация std vector bool
добрый вечер, не могу найти в сети реализацию st::vector<bool> - есть у кого под рукой?) Почитать)
C++ В какой последовательности начать изучать языки программирования?
Появился интерес к C++, но после того, как начал читать про него подробнее, наткнулся на информацию о том, что что бы легче было понимать функции и вообще в целом его, сначала нужно изучить Pascal....
C++ Архитектура компоновки http://www.cyberforum.ru/cpp-beginners/thread1787390.html
Научился кодить(более менее), но все таки остались пробелы в понимании. Искал в гугле данные темы, но во всех очень поверхностно и шаблонно. Я хотел бы узнать у знающих людей как устроена связь...
C++ Тернарный оператор "?" Добрый Вечер . Столкнулся с вопросом помогите понять хочу разобраться с ходом ее работы. #include <iostream> using namespace std; int main() { int a; a=0?a=1:a=2?a=3:a=4?a=5:a=6; подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru