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

Нахождение разбиений числа - 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
Научился кодить(более менее), но все таки остались пробелы в понимании. Искал в гугле данные темы, но во всех очень поверхностно и шаблонно. Я хотел бы узнать у знающих людей как устроена связь между заголовочником(.h) и файлом исполняемым (.сpp), на конкретном примере. //sum.h int sum (int, int); //sum.cpp #include "sum.h" int sum(int a,int b) { return a+b;
C++ Тернарный оператор "?" Добрый Вечер . Столкнулся с вопросом помогите понять хочу разобраться с ходом ее работы. #include <iostream> using namespace std; int main() { int a; a=0?a=1:a=2?a=3:a=4?a=5:a=6; подробнее

Показать сообщение отдельно
olezhkapisatel
0 / 0 / 0
Регистрация: 19.07.2016
Сообщений: 39

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

30.07.2016, 02:48. Просмотров 180. Ответов 6
Метки (Все метки)

Все привет, ребят помогите. Суть задания: разбиений числа, есть число, нужно его разбить. Например, {3,1,1} или {3,2} — разбиения числа 5, поскольку 5 = 3 + 1 + 1 = 3 + 2. Всего существует p(5) = 7 разбиений числа 5: {1,1,1,1,1}, {2,1,1,1}, {2,2,1}, {3,1,1}, {3,2}, {4,1}, {5}. Ну вы поняли, и мне надо сделать диапазон, типо что бы пользователь задавал на какие числа он хочет разбить заданное число, к примеру 5 разбить только на 1 и на 2, выходит: {1,1,1,1,1}, {2,1,1,1}, {2,2,1}. Вот как то так, есть 2 кода, как я их не изменял как не пытался, не выходит
1 код
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
#include <iostream>
int n, sum[10];
using namespace std;
void pokemoni(int left, int min = 0, int i = 0)
{
    if (left < 0 || min == n)
        return;
    sum[i] = min;
    if (min != 0)
    {
        pokemoni(left - min, min, i + 1);
    }
    pokemoni(left - 1, min + 1, i);
    if (left == 0)
    {
        for (int j = 0; j <= i; ++j)
            cout << sum[j] << (j != i ? '+' : '\n');
    }
 
}
void main()
{
    setlocale(LC_ALL, "Russian");
    cout << "Введите целое число: ";
    cin >> n;
    pokemoni(n);
    system("pause");
}
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
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
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
 
void split_int(int num);
 
int main()
{
    int N;
    time_t bgn,end;
    do
    {
        printf("Enter int number: ");
        scanf("%d",&N);
        time(&bgn);
        split_int(N);
        time(&end);
        printf("split time %lf sec",difftime(end,bgn));
        printf("[Y/N] Y - Enter new number\r\n");
    }
    while(toupper(getch()) == 'Y');
    //split_int
}
 
void split_int(int num)
{
    int i1,i2,i3,i4,i5,i6,i7,i8,i9,MAX = 10;
    for(i1 = 0; i1 < MAX; i1++)
    for(i2 = i1; i2 < MAX; i2++)
    for(i3 = i2; i3 < MAX; i3++)
    for(i4 = i3; i4 < MAX; i4++)
    for(i5 = i4; i5 < MAX; i5++)
    for(i6 = i5; i6 < MAX; i6++)
    for(i7 = i6; i7 < MAX; i7++)
    for(i8 = i7; i8 < MAX; i8++)
    for(i9 = i8; i9 < MAX; i9++)
    {
        if(i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 == num)
        {
            if(i1 != 0)
                printf("%d + ",i1);
            if(i2 != 0)
                printf("%d + ",i2);
            if(i3 != 0)
                printf("%d + ",i3);
            if(i4 != 0)
                printf("%d + ",i4);
            if(i5 != 0)
                printf("%d + ",i5);
            if(i6 != 0)
                printf("%d + ",i6);
            if(i7 != 0)
                printf("%d + ",i7);
            if(i8 != 0)
                printf("%d + ",i8);
            if(i9 != 0)
                printf("%d",i9);
            printf(" == %d\r\n",num);
        }
 
    }           
    printf("\r\n");
}
Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru