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

Как можно получить все подмножества множества? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Tmin100
 Аватар для Tmin100
6 / 6 / 0
Регистрация: 12.10.2012
Сообщений: 71
27.03.2013, 12:05     Как можно получить все подмножества множества? #1
Например из множества, представлнного массивом [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] [1,3,4] [2,3,4] [1,2,3,4]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Friday
ну и долго меня небыло...
 Аватар для Friday
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
27.03.2013, 12:13     Как можно получить все подмножества множества? #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
#include <iostream>
#include <string>
 
char* IntToStr(int Val,char* Buf)
{
    while(Val)
    {
        *Buf++=char(48+Val%10);
        Val/=10;
    }
    return &(*Buf=0);
}
 
void Show(int* arr,int size,char* start,char* end)
{
    char* nextend;
    for(int i=0;i<size;i++)
    {
        nextend=end;
        nextend=IntToStr(arr[i],nextend);
        std::cout<<start<<'\n';
        Show(&(arr[i+1]),size-i-1,start,nextend);
    }
}
 
int main()
{
    int* arrayInt;//множество
    char* output=new char[80];
    arrayInt=new int[4];
    arrayInt[0]=1;arrayInt[1]=2;
    arrayInt[2]=3;arrayInt[3]=4;
    Show(arrayInt,4,output,output);//передаем указатель на первый элемент массива,размер массива и указатель на первый элемент массива для вывода
 
    system("pause");
    delete[] output;
    delete[] arrayInt;
    return 0;
}
Tmin100
 Аватар для Tmin100
6 / 6 / 0
Регистрация: 12.10.2012
Сообщений: 71
27.03.2013, 14:08  [ТС]     Как можно получить все подмножества множества? #3
Friday, спасибо, хитрый алгоритм, мне просто на выходе надо получать не строки, а массивы чисел, никак не соображу как его не числа переделать...

Добавлено через 1 час 38 минут
Всё, разобрался как сделать такое массивами без строк
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
#include <iostream>
#include <string>
 
using namespace std;
 
int* IntToStr(int Val,int* Buf)
{
    while(Val)
    {
        *Buf++=Val%10;
        Val/=10;
    }
    return &(*Buf=0);
}
 
void Show(int* arr,int size,int* start,int* end, int rec)
{
    int* nextend;
    for(int i=0;i<size;i++)
    {
        nextend=end;
        nextend=IntToStr(arr[i],nextend);
        cout<<rec<<' ';
        for (int j=0; j<rec; j++)
            cout<<start[j];
        cout<<endl;
        Show(&(arr[i+1]),size-i-1,start,nextend, rec+1);
    }
}
 
int main()
{
    int* arrayInt;//множество
    int* output=new int[80];
    arrayInt=new int[6];
    arrayInt[0]=1;
    arrayInt[1]=2;
    arrayInt[2]=3;
    arrayInt[3]=4;
    arrayInt[4]=5;
    arrayInt[5]=6;
    Show(arrayInt,6,output,output, 1);//передаем указатель на первый элемент массива,размер массива и указатель на первый элемент массива для вывода
    //system("pause");
    delete[] output;
    delete[] arrayInt;
    return 0;
}
/*#include <iostream>
 
using namespace std;
 
int main()
{
    int N = 10;                         //Количество элементов множества
    int A[] = {1,2,3,4,5,6,7,8,9,10};   //Множество A
 
    //Переберём все возможные подмножества В множества А
    for (int i=4; i<=N; i++)
    {
        int *B = new int[i];
        for (int j=0; j<i; j++)
 
        delete[] B;
    }
    cout << "Hello World!" << endl;
    return 0;
}
*/
Осталось только IntToStr выпилить...
Andew
0 / 0 / 0
Регистрация: 23.09.2013
Сообщений: 12
24.03.2014, 13:14     Как можно получить все подмножества множества? #4
подскажыте какой ето алгоритм и на основе чего роботает если не сложно)
Yandex
Объявления
24.03.2014, 13:14     Как можно получить все подмножества множества?
Ответ Создать тему
Опции темы

Текущее время: 06:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru