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

Комбинаторика - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дано бинарное дерево. Выполнить вращение для самого разбалансированого поддерева http://www.cyberforum.ru/cpp-beginners/thread1096855.html
Здравствуйте. Прошу помощи в решение задачи. Дано бинарное дерево. Выполнить вращение для самого разбалансированого поддерева. Просьба написать код. Заранее спасибо
C++ Динамический ввод строки Решил на будущее написать программу динамического ввода. Судя по выводу, где-то произошла утечка памяти(в выводе появляется 3 квадратика в конце). Все перепробовал, не знаю как решить #include... http://www.cyberforum.ru/cpp-beginners/thread1096842.html
Создать систему наблюдения за животными в зоопарке C++
создать систему наблюдения за животными в зоопарке. каждое животное имеет свое название,имя,возраст и вес . помогите срочно пожалуйста.
C++ Ввод строки с пробелами
Собственно вот текст, не хочет никакими функциями принимать строку stud.fio с пробелами, испробовал всё, до чего голова дошла. Нужно чтобы в переменную stud.fio можно было вводить целую строку с...
C++ Удаление элемента структуры http://www.cyberforum.ru/cpp-beginners/thread1096819.html
Есть код. Удаляет заданный элемент структуры. void list_del(list_head *list, int i){ if(list->head==NULL){printf("Список не содержит элементов.");return;} list_node *current = list->head;...
C++ Каждый элемент 1 ряда матрицы разделить на соответствующий элемент второго ряда Вот задача : Есть матрица B (m, n). Каждый елемент ее 1 ряда разделить на соответствующий елемент второго ряда, все елементы 2го ряда - на соответствующие елементы 3 ряда (такое делать к последнему... подробнее

Показать сообщение отдельно
Genn55
367 / 214 / 41
Регистрация: 26.12.2012
Сообщений: 708

Комбинаторика - C++

14.02.2014, 22:55. Просмотров 587. Ответов 2
Метки (Все метки)

Доброго всем времени суток!Помогите пожалуйста с решением такой задачи.Дана последовательность вещественных чисел.Пользователь вводит число.Программа должна показать все возможные комбинации чисел составляющих сумму заданного числа из этой последовательности.Если таких комбинаций нет выдать сообщение.Количество чисел для комбинации задает пользователь.Результат вывести в виде таблицы.
Пример последовательность 1,2,3,4,5,6.Пользователь задает число 6. Комбинация из 2х чисел
1 + 5 = 6
2 + 4 = 6
3 + 3 = 6
из 3х чисел
1 + 2 + 3 = 6
2 + 2 + 2 = 6
1 + 1 + 4 = 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
96
97
98
99
100
#include <iostream>
#include <iomanip>
#include <windows.h>
 
//Прототипы функций подбора.Пока используются 2 остальные аналогичны
void Podbor2(double *,const int,const double);//комбинация из 2х чисел
void Podbor3(double *,const int,const double);//комбинация из 3х чисел
//void Podbor4(double *,const int,const double);
//void Podbor5(double *,const int,const double);
//void Podbor6(double *,const int,const double);
void Shapka1(const int);//Печать заголовка
bool PrintRez(const double,const double);//Печать результатов.
bool PrintRez(const double,const double,const double);//Печать результатов.
//Считает сумму
double Summ (double a,double b,double c = 0,double d = 0,double k = 0)
{
 return a + b + c + d + k;
}
 
using namespace std;
 
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 int num_prop;
 double num;
 void (*Pf[2])(double *,const int,const double)={Podbor2,Podbor3};//Массив указателей
 const int size = 6;
 double  Arr[size] = {1,2,3,4,5,6};//Для упрощения заполнил целыми числами
 
    cout << " Введите число  \n";
    cin >>num;
    cout << " Введите количество чисел для подбора 2 или 3   \n";
    cin >>num_prop;
 
    Shapka1(num_prop);
    (*Pf[num_prop-2])(Arr,size,num);//Обращяемся по индексу (идексация с 0,комбинция из1 числа не нужна
 
 return 0;
 }
void  Podbor2(double *mass,const int leng,const double m)
{
 bool rez = false;
 
    for (int i = 0; i < leng; i++)
    {
         for (int j = i; j < leng; j ++)
         {
           if (Summ(mass[i],mass[j]) == m)
               rez = PrintRez (mass[i],mass[j]);
         }
    }
    if (!(rez))
       cout << " Поиск завершен результатов нет! \n";
}
void  Podbor3(double *mass,const int leng,const double m)
{
 bool rez = false;
     for (int i = 0; i < leng; i++)
    {
         for (int j = i; j < leng; j ++)
         {
            for (int k = j; k < leng; k ++)
             {
                if (Summ(mass[i],mass[j],mass[k]) == m)
                    rez = PrintRez (mass[i],mass[j],mass[k]);
             }
         }
    }
    if (!(rez))
       cout << " Поиск завершен результатов нет! \n";
}
bool PrintRez(const double a,const double b)
{
 bool rezult = false;
     cout << setw(15)<<setprecision(3) << a << setw(15) << b
     << setw(15)<<setprecision(4) << Summ(a,b)<<setw(15) <<"\n";
   return  rezult = true;
}
bool PrintRez(const double a,const double b,const double c)
{
    bool rezult = false;
 cout << setw(15)<<setprecision(3) <<a<< setw(15) << b<< setw(15)
     <<c<< setw(15)<<setprecision(4) << Summ(a,b,c)<<setw(15) <<"\n";
     return  rezult = true;
}
void Shapka1(const int n)
{
    cout << "\t\t\t Комбинация из " << n << "  чисел \n";
 if (n == 2)
    {
    cout << setw (15)<<"Число1"<<setw (15)<<"Число2"<<setw (15)<<"Сумма \n\n";
    }
 if ( n == 3)
    {
     cout << setw (15)<<"Число1"<<setw (15)<<"Число2"<<setw (15)<<setw (15)<<"Число3"
          << setw (15)<<"Сумма \n\n";
    }
}
Дошел до 6 циклов,но мне кажется,что это не лучшее решение такой задачи.Может кто предложит более рациональное решение?За ранее всем спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru