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

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

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

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

03.12.2011, 19:31. Просмотров 1796. Ответов 4
Метки нет (Все метки)

Всем привет!

Есть массив 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++
Все возможные комбинации 5 чисел C++
Все возможные a и b по формуле с вложенными циклами C++
Все возможные суммы элементов массива C++
C++ разложение на все возможные слагаемые
C++ Все возможные комбинации из 4 цифр
C++ Все возможные комбинации длины k из 0 и 1
C++ Все возможные перестановки элементов заданного массива
Вывести все возможные расположения двух единиц в массиве из четырех элементов C++
Все возможные комбинации из 10 цифр по n C++
Из вещественного массива X удалить все числа, превышающие среднее арифметическое элементов массива C++
Массив: Определите все серии подряд идущих элементов из первого массива, совпадающие с сериями второго массива C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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++;
* * }
Код неверный.Протестировал,чем больше елементов для комбинацый -тем больше комбинаций теряеться.
Байт
Эксперт C
 Аватар для Байт
15036 / 9438 / 1380
Регистрация: 24.12.2010
Сообщений: 17,452
01.04.2015, 21:00     Все возможные комбнинации элементов массива #5
zago-vlad, Это называется "Генерация сочетаний". На форуме алгоритмов - без счета. Просто тебе (после того как найдешь алгоритм) надо будет просто пробежаться циклом от 1 до n
Yandex
Объявления
01.04.2015, 21:00     Все возможные комбнинации элементов массива
Ответ Создать тему
Опции темы

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