Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2012, 17:47   #1
Yashman
Новичок
Джуниор
 
Регистрация: 02.07.2011
Сообщений: 2
Вопрос Задача на множества в C++

Товарищи программисты, помогите решить задачу! Дано множество натуральных чисел. Надо составить все подмножества, сумма элементов которых равна числу Х. Сперва вводится кол-во элементов множества, потом все элементы, затем число Х. Пример:
Ввод:
12
1 5 7 3 10 8 9 2 4 6 11 13
15
Вывод:
4 11
2 13
9 6
9 2 4
3 2 4 6
3 8 4
3 10 2
7 2 6
7 8
5 4 6
5 8 2
5 10
5 7 3
1 8 6
1 8 2 4
1 10 4
1 3 11
1 3 9 2
1 7 3 4
1 5 9
1 5 3 6
1 5 3 2 4
1 5 7 2

Вот программа, которая выводит все подможества, состоящие из двух элементов:

Код:
#include <iostream>
 
using namespace std;
 
int main(int argc, const char * argv[])
{
    int size;
    cout << "Enter size: ";
    cin >> size;
    int *numbers = new int[size];
    cout << "Enter numbers: ";
    for (int i = 0; i < size; i++)
        cin >> numbers[i];
    int X;
    cout << "Enter X: ";
    cin >> X;
    int sum = 0;
    for (int i = 0; i < size-1; i++)
    {
        for (int j = i+1; j < size; j++)
        {
            sum = numbers[i];
            sum += numbers[j];
            if (sum == X)
                cout << numbers[i] << " " << numbers[j] << "\n";
        }
    }
    return 0;
}

Можно заменить цикл той программы на этот и будут выбраны подмножества, состоящие из 3 элементов:
Код:
for (int i = 0; i < size-2; i++)
{
    for (int j = i+1; j < size-1; j++)
    {
        for (int k = j+1; k < size; k++)
        {
            sum = numbers[i] + numbers[j];
            sum += numbers[k];
            if (sum == X)
                cout << numbers[i] << " " << numbers[j] << " " << numbers[k] << "\n";
        }
    }
}

Внимание вопрос: как создать универсальную программу, способную выбирать абсолютно все возможные подмножества? Конечно, можно вручную написать цикл на каждый случай, но это глупо и потом, если будет введено много чисел и большое число Х, могут появится подмножества из тысяч элементов. Заранее благодарю!
Yashman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на множества katringenper Помощь студентам 0 19.02.2012 16:32
Задача на множества Hita4 Паскаль, Turbo Pascal, PascalABC.NET 2 13.12.2011 06:35
Множества в C#. Задача Brabus Помощь студентам 0 26.12.2010 22:49
задача на множества любаша Помощь студентам 6 29.09.2010 18:46
Задача на множества Eisebio Помощь студентам 2 26.03.2009 10:49