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

Все возможные комбнинации элементов массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
zago-vlad
13 / 8 / 1
Регистрация: 12.01.2010
Сообщений: 106
03.12.2011, 19:31     Все возможные комбнинации элементов массива #1
Всем привет!

Есть массив char array[s] (s - размер массива).
Нужно написать прогу, которая выведет все возможные КОМБИНАЦИИ элементов этого массива и выведет результат на экран. Например, если в массиве строка abc то прога должна вывести что-то такое:

ab
ac
bc
abc

Изменение порядка не считается комбинацией (например, ab и ba считаются идентичными).

Заранее ОГРОМНОЕ спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2011, 19:31     Все возможные комбнинации элементов массива
Посмотрите здесь:

Все возможные суммы элементов массива C++
C++ Удалить из массива все элементы, которые меньше среднеарифметического значения всех элементов исходного массива
C++ разложение на все возможные слагаемые
C++ Функции обработки массива (определить произведение элементов массива, заменить модулем все элементы массива, уничтожить элемент с заданным значением)
C++ Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все четные элементы, а в конец массива - все нечетные
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
n00b.vcxproj
Кодер
 Аватар для n00b.vcxproj
46 / 45 / 2
Регистрация: 10.10.2010
Сообщений: 229
03.12.2011, 19:42     Все возможные комбнинации элементов массива #2
циклом.
C++
1
2
3
4
for(int i=0;i<s;i++)
for(int j=1;j<s;j++)
if(j!=i)
printf("%c%c\n",array[i],array[j]);
будет выводить от ab до ba, если это безразлично, то так.
если нет, то надо копаться.
zago-vlad
13 / 8 / 1
Регистрация: 12.01.2010
Сообщений: 106
03.12.2011, 21:03  [ТС]     Все возможные комбнинации элементов массива #3
Цитата Сообщение от n00b.vcxproj Посмотреть сообщение
то надо копаться
Я думаю, что в данном случае надо создать массив с номерами уже использованных комбинаций и при каждом выполнении цикла проверять, нет ли текущей комбинации в этом массиве

Добавлено через 49 минут
n00b.vcxproj, твой код выводит только комбинации, состоящие из двух чисел. Например, если массив из 4-х элементов (a,b,c,d), то вывод должен быть похожим на такое:
ab
bc
abc
dbc
abcd
и т.д.

А втоя прога выводит такое:
ab
ac
ad
bc
bd
cd

Ладно, я уже написал своё решение, которое выводит все возможные комбинации элементов массива:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int i = 0;
while(i < s)
    {
            int k = i;
            while(k < s) {
            int j = k;
            while(j <= s) {
                    if((j - k) > 1) {
                    cout << array[i] << " ";
                    int u = 1;
                    int r = j - k;
                    while(u < r) {
                            cout << array[k+u] << " ";
                            u++;
                    }
                    cout << "\n";
                    }
                    j++;
            }
            k++;
            }
            i++;
    }
BohdanSavych
1 / 1 / 0
Регистрация: 25.12.2013
Сообщений: 44
01.04.2015, 20:25     Все возможные комбнинации элементов массива #4
Цитата Сообщение от zago-vlad Посмотреть сообщение
int i = 0;
while(i < s)
* * {
* * * * * * int k = i;
* * * * * * while(k < s) {
* * * * * * int j = k;
* * * * * * while(j <= s) {
* * * * * * * * * * if((j - k) > 1) {
* * * * * * * * * * cout << array[i] << " ";
* * * * * * * * * * int u = 1;
* * * * * * * * * * int r = j - k;
* * * * * * * * * * while(u < r) {
* * * * * * * * * * * * * * cout << array[k+u] << " ";
* * * * * * * * * * * * * * u++;
* * * * * * * * * * }
* * * * * * * * * * cout << "\n";
* * * * * * * * * * }
* * * * * * * * * * j++;
* * * * * * }
* * * * * * k++;
* * * * * * }
* * * * * * i++;
* * }
Код неверный.Протестировал,чем больше елементов для комбинацый -тем больше комбинаций теряеться.
Байт
 Аватар для Байт
13951 / 8782 / 1221
Регистрация: 24.12.2010
Сообщений: 15,891
01.04.2015, 21:00     Все возможные комбнинации элементов массива #5
zago-vlad, Это называется "Генерация сочетаний". На форуме алгоритмов - без счета. Просто тебе (после того как найдешь алгоритм) надо будет просто пробежаться циклом от 1 до n
Yandex
Объявления
01.04.2015, 21:00     Все возможные комбнинации элементов массива
Ответ Создать тему
Опции темы

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