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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.93
Modlika
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 3
#1

Перебор всех возможных подмножеств множества целых чисел - C++

10.04.2009, 20:27. Просмотров 5469. Ответов 10
Метки нет (Все метки)

Всем привет))))
Пожалуйста, помогите решить задачку!!!!! Очень нужно, срочно!!!
Программа перебора всех возможных подмножеств множества целых чисел,т.е.
если с клавиатуры вводим, например 3, то на экране должно быть:
123
12
23
13
3
2
1
Заранее СПАСИБО!!!!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2009, 20:27     Перебор всех возможных подмножеств множества целых чисел
Посмотрите здесь:
C++ Перебор всех возможных подмножеств заданного множества целых чисел
Генерация всех подмножеств данного множества C++
Организовать перебор всех возможных сочетаний C++
Перебор и вывод всех возможных сочетаний C++
Реализовать перебор всех возможных IP-адресов (С++) C++
Перебор всех возможных вариантов с переменными приравненных к определенному значению C++
C++ Перебор всех возможных способов размещения n различных предметов по m различным ящикам
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RazorQ
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
10.04.2009, 22:37     Перебор всех возможных подмножеств множества целых чисел #2
Я логику понять не могу. Ну допустим "123" - присутствует три. "12" - в сумме дает 3, а "1" или "2" тут причем?
Monte-Cristo
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
10.04.2009, 22:48     Перебор всех возможных подмножеств множества целых чисел #3
RazorQ, для этого необходимо учить дискретную математику.... подмножества и множества....
RazorQ
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
10.04.2009, 22:51     Перебор всех возможных подмножеств множества целых чисел #4
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
RazorQ, для этого необходимо учить дискретную математику.... подмножества и множества....
Я подмножества и множества знаю, но связать материал не могу
Monte-Cristo
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
10.04.2009, 23:08     Перебор всех возможных подмножеств множества целых чисел #5
ну тогда что не понятного?
3 - означает что в нем можно выделить следующие подмножества:
{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}

для 4 вот:
{1},{2},{3},{4},{1,2},{1,3},{1,4},{2,3},{2,4},{3,4},{1,2,3},{1,2,4},{2,3,4},{1,2,3,4}
RazorQ
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
10.04.2009, 23:10     Перебор всех возможных подмножеств множества целых чисел #6
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
ну тогда что не понятного?
3 - означает что в нем можно выделить следующие подмножества:
{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}

для 4 вот:
{1},{2},{3},{4},{1,2},{1,3},{1,4},{2,3},{2,4},{3,4 },{1,2,3},{1,2,4},{2,3,4},{1,2,3,4}
Точно точно. Блин стыдно
darkAngel
Технофашист
214 / 195 / 4
Регистрация: 11.03.2009
Сообщений: 860
11.04.2009, 08:45     Перебор всех возможных подмножеств множества целых чисел #7
По-идее тогда нужно включать и пустое множество {0}.

Я попробывал что-то сделать побыстрому, но тут, походу, думать нужно серьёзно.
Modlika
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 3
11.04.2009, 11:44  [ТС]     Перебор всех возможных подмножеств множества целых чисел #8
Мне сказали, что пустое множество не обязательно)))
Практолок
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 12
11.04.2009, 12:02     Перебор всех возможных подмножеств множества целых чисел #9
Введенное число - количество разрядов двоичного числа, для каждово значения которого (в случае с введеным числом 3 это будут значения от 1 до 8 соответственно) нужно просто перечислить включенные в нем биты. Можно конечно и через рекурсии, но это не так смешно получится.
Exit
Сообщений: n/a
11.04.2009, 17:14     Перебор всех возможных подмножеств множества целых чисел #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const n=3;
for(int i=0; i<(2 в степени n);i++)
{int y=i;
 int j=1;
        while (y>0){
                int x=y;
                y=y/2;
                if ((x-2*y)==1)
                        printf ("%d ", j);
                j++;
        }
  printf("\n");
}
ну примерно так
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2009, 23:19     Перебор всех возможных подмножеств множества целых чисел
Еще ссылки по теме:
Перебор возможных значений для трёх чисел C++
Из множества целых чисел получить множество чисел, являющихся квадратами нечетных чисел C++
Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла C++
C++ Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла.
C++ Разбиение множества S на M подмножеств

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

Или воспользуйтесь поиском по форуму:
Modlika
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 3
11.04.2009, 23:19  [ТС]     Перебор всех возможных подмножеств множества целых чисел #11
Нашла в инете кое-какой исходник, он хорошо работает, выводит именно то что мне нужно, но я совсем не могу разобраться как???????? не понимаю алгоритма((((
Объясните кто-нибудь, плиииииз)))))))
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>
#include <conio.h>
#include <string.h>
using namespace std;
 
void fun(int N, int m, int tek, int k, string tekS)
{
 if(tek>=m)
  {
   cout<<tekS<<endl;
   return;
  }
 for(int i=k+1; i<=N; i++)
  fun(N,m,tek+1,i,tekS+(char)(i+48));
 
}
 
int main()
{
int N;
cout<<"Enter N: ";
cin>>N;
for(int i=1;i<=N;i++)
 fun(N,i,0,0,"");
 
getch();
return 0;
}
Пояснение аргументов функции:

void fun(int N, int m, int tek, int k, string tekS)
N - собственно, N
m - длина подмножества. Изменяется от 1 до N
tek - номер текущего элемента подмножества. Изменяется от 1 до m
k - значение предыдущего элемента
tekS - строка, в которую пишутся элементы подмножества

Добавлено через 3 минуты 0 секунд
Нашла в инете кое-какой исходник, он хорошо работает, выводит именно то что мне нужно, но я совсем не могу разобраться как???????? не понимаю алгоритма((((
Объясните кто-нибудь, плиииииз)))))))
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>
#include <conio.h>
#include <string.h>
using namespace std;
 
void fun(int N, int m, int tek, int k, string tekS)
{
if(tek>=m)
{
cout<<tekS<<endl;
return;
}
for(int i=k+1; i<=N; i++)
fun(N,m,tek+1,i,tekS+(char)(i+48));
 
}
 
int main()
{
int N;
cout<<"Enter N: ";
cin>>N;
for(int i=1;i<=N;i++)
fun(N,i,0,0,"");
 
getch();
return 0;
}
Пояснение аргументов функции:

void fun(int N, int m, int tek, int k, string tekS)
N - собственно, N
m - длина подмножества. Изменяется от 1 до N
tek - номер текущего элемента подмножества. Изменяется от 1 до m
k - значение предыдущего элемента
tekS - строка, в которую пишутся элементы подмножества
Yandex
Объявления
11.04.2009, 23:19     Перебор всех возможных подмножеств множества целых чисел
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru