Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 8

Создайте процедуру, печатающую все подмножества множества {1, 2, …, N}

04.06.2018, 17:07. Показов 2823. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создайте процедуру, печатающую все подмножества множества {1, 2, …, N}. c++
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2018, 17:07
Ответы с готовыми решениями:

Рекурсия: Создайте процедуру, печатающую все возможные перестановки для целых чисел от 1 до N.
Создайте процедуру, печатающую все возможные перестановки для целых чисел от 1 до N. помогите пожалуйста я никак не могу составить...

Создайте процедуру, печатающую все числа, кроме единицы, на которые без остатка делится число N
Дана задача: Создайте процедуру, печатающую все числа, кроме единицы, на которые без остатка делится число N, где N параметр...

Описать процедуру print (A), печатающую в алфавитном порядке все элементы множества
type letters = set of ‘a’ .. ‘z’; Описать процедуру print (A), печатающую в алфавитном порядкевсе элементы множества A, имеющего тип...

6
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
03.08.2018, 18:48
456r56, здравствуйте! Можно, например, так:

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
#include <iostream> 
#include <cmath>
 
    using namespace std;
 
void printAllSubsets(int* set, int size) {
    size = pow(2, size);
    for (int i = 0; i < size; i++) {
        cout << "{ ";
        for (int j = 0; j < size; j++) {
            if (i & (1 << j))
                cout << set[j] << " ";
        }
        cout << "}\n";
    }
}
 
int main() {
    int n;
    cout << "Enter a number of elements in the set:\n";
    cout << "n = ";
    cin >> n;
    int* set = new int[n];
    for (int i = 0; i < n; i++) {
        set[i] = i + 1;
    }
    cout << "Output of the program:\n";
    printAllSubsets(set, n);
    delete [] set;
    system("pause");
    return 0;
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
03.08.2018, 22:57
456r56, Если N<=63, то можно, например, так.
C++
1
2
3
4
5
6
7
8
unsigned long X, P=1, i;
int P=1;
for(i=0; i<N; i++) P*=2;
for(X=0; X<P; X++) {
  for(i=0; i<N; i++) 
    if (X&(1<<i)) cout << i+1 << " ";
  cout << endl;
}
Если же N больше, то битовую строку придется устроить немножко иначе. Но программа и без этого будет работать очень долго. И с этим ничего не попишешь. Ибо множество из 63 элементов имеет 263 подмножеств = 8*1018. Даже если предположить, что каждое подмножество выдается за один машинный такт, на компе 10 Гигафлоп это займет 8*108 сек = 25 лет
А увеличение N на 1 будет увеличивать время счета в 2 раза.

Добавлено через 4 минуты
Fixer_84, У вас похожий код, только мне очень кажется не очень правильным.
Границы цикла в строках 8 и 10, имхо, должны быть разными.
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
03.08.2018, 23:05
Цитата Сообщение от Байт Посмотреть сообщение
Fixer_84, У вас похожий код, только мне очень кажется не очень правильным.
Границы цикла в строках 8 и 10, имхо, должны быть разными.
Согласен. Мне вообще кажется там UB может быть из-за переполнения(сдвигаем например на 2^20 вместо 20).
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
04.08.2018, 17:39
Цитата Сообщение от Новичок Посмотреть сообщение
Fixer_84, У вас похожий код, только мне очень кажется не очень правильным.
Границы цикла в строках 8 и 10, имхо, должны быть разными.
Да, я немного ошибся. Будет так:

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
#include <iostream> 
#include <cmath>
 
    using namespace std;
 
void printAllSubsets(int* set, int n) { 
    unsigned int size = pow(2, n);
    for (int i = 0; i < size; i++) {
        cout << "{ ";
        for (int j = 0; j < n; j++) {
            if (i & (1 << j))
                cout << set[j] << " ";
        }
        cout << "}\n";
    }
}
 
int main() {
    int n;
    cout << "Enter a number of elements in the set:\n";
    cout << "n = ";
    cin >> n;
    int* set = new int[n];
    for (int i = 0; i < n; i++) {
        set[i] = i + 1;
    }
    cout << "Output of the program:\n";
    printAllSubsets(set, n);
    delete [] set;
    system("pause");
    return 0;
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
04.08.2018, 17:53
Fixer_84, я надеюсь, вы понимаете, что создавать массив set, каждый элемент которого однозначно и просто определяется его номером (set[i] = i+1) - не более чем излишество?
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
04.08.2018, 18:11
Байт, вы правы. Я надеюсь, что тот кому нужна эта программа сможет заполнить массив самостоятельно. Просто в задании сказано
Цитата Сообщение от 456r56 Посмотреть сообщение
Создайте процедуру, печатающую все подмножества множества {1, 2, …, N}.
Поэтому я и заполнил его от 1 до N. А так, эта программа для любого множества работать будет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.08.2018, 18:11
Помогаю со студенческими работами здесь

Файлы: определить процедуру разбития множества на монотонные (по возрастанию) подмножества
Здравствуйте! Помогите, пожалуйста исправить код - все очень плохо. Суть задания: Определить процедуру разбития множества А на монотонные...

Найти все подмножества множества
Найти все подмножества множества

Напечатать все подмножества множества {1...k}
Замучилась это делать - ничего не получается! Помогите кто-нибудь!

Перечислить все подмножества n элементного множества {1,2,.,n}
Помогите пожалуйста написать программу для этой задачи: Перечислить все подмножества n элементного множества {1,2,...,n}

Вывести в файл все подмножества множества
Вывести в файл все подмножества множества {1,...,N} Каким образом это можно сделать ?


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru