Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/75: Рейтинг темы: голосов - 75, средняя оценка - 4.85
 Аватар для Aviz__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,501

Получение всех комбинаций элементов массива

27.07.2018, 09:43. Показов 14988. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Время от времени возникает необходимость получить все комбинации элементов, какого либо набора.
Вот, пришло на ум, как относительно просто это сделать:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
        char [] strBox = {'a','b','c','d'};
        for (int i = 0; i < strBox.length; i++)
            for (int j = 0; j < strBox.length; j++) {
                if (j != i)
                    for (int k = 0;k < strBox.length; k++) {
                        if (k != i && k != j)
                            for (int l = 0; l < strBox.length; l++) {
                                if (l != i && l != j && l != k)
                                    System.out.printf("%s %s %s %s%n", strBox[i], strBox[j], strBox[k], strBox[l]);
                            }
                    }
            }
    }
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.07.2018, 09:43
Ответы с готовыми решениями:

Генерация всех возможных комбинаций из элементов массива
Всем привет, совсем недавно зарегистрировался на форуме, начал потихоньку изучать Pascal ABC, поэтому прошу помочь мне с написанием кода. ...

Перебор всех комбинаций элементов массива в нескольких одномерных массивов
Всем привет! Парни, возникла задачка. Подскажите, как можно перебрать и вывести в текст контрол все возможные варианты комбинаций из трех...

Получение всевозможных комбинаций массива
необходимо получить всевозможные комбинации массива Исх. массив : 1,2,3 Комбинации : 1,2,3; 1,3,2; 2,1,3 и т.д.

30
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
30.07.2018, 18:11
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от WinniPuh Посмотреть сообщение
и пофиг на команду ретурн
Из 5 символов получить все комбинации длины 3. Какой будет вывод с return и какой и какой без?
Цитата Сообщение от WinniPuh Посмотреть сообщение
как программа поняла
Когда закончится for в первом(!) вызове make.
0
75 / 61 / 29
Регистрация: 20.04.2015
Сообщений: 415
30.07.2018, 18:54
Цитата Сообщение от JIeIIIa Посмотреть сообщение
Из 5 символов получить все комбинации длины 3. Какой будет вывод с return и какой и какой без?
Кликните здесь для просмотра всего текста
0
1
2
3
a b c
3
a b d
3
a b f
2
3
a c b
3
a c d
3
a c f
2
3
a d b
3
a d c
3
a d f
2
3
a f b
3
a f c
3
a f d
1
2
3
b a c
3
b a d
3
b a f
2
3
b c a
3
b c d
3
b c f
2
3
b d a
3
b d c
3
b d f
2
3
b f a
3
b f c
3
b f d
1
2
3
c a b
3
c a d
3
c a f
2
3
c b a
3
c b d
3
c b f
2
3
c d a
3
c d b
3
c d f
2
3
c f a
3
c f b
3
c f d
1
2
3
d a b
3
d a c
3
d a f
2
3
d b a
3
d b c
3
d b f
2
3
d c a
3
d c b
3
d c f
2
3
d f a
3
d f b
3
d f c
1
2
3
f a b
3
f a c
3
f a d
2
3
f b a
3
f b c
3
f b d
2
3
f c a
3
f c b
3
f c d
2
3
f d a
3
f d b
3
f d c

да ты угараешь надо мной????одинаково выводит что с ретурном что без

Цитата Сообщение от JIeIIIa Посмотреть сообщение
Когда закончится for в первом(!) вызове make.
цикл заканчивется и выходит из цикла потом заходит обратно в цикл и удаляет последний элемент
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
30.07.2018, 18:57
Цитата Сообщение от WinniPuh Посмотреть сообщение
да ты угараешь надо мной????
Троллинг детектид.

Тут уже указывал начальные данные и два вывода. Они одинаковые?

Добавлено через 48 секунд
Цитата Сообщение от WinniPuh Посмотреть сообщение
цикл заканчивется и выходит из цикла потом заходит обратно в цикл
Ага. Только заходит уже в "другом" make. Налицо не понимание рекурсии.
0
75 / 61 / 29
Регистрация: 20.04.2015
Сообщений: 415
30.07.2018, 20:49
Цитата Сообщение от JIeIIIa Посмотреть сообщение
Налицо не понимание рекурсии.
метод запустился заново, но первый запущенный продолжает работать?

Добавлено через 1 минуту
и когда конечный метод заканчивает работу метод продолжает там где остановился с момента где он запустил следующий и так далее? правильно?
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
30.07.2018, 20:53
Цитата Сообщение от WinniPuh Посмотреть сообщение
с момента где он запустил следующий
Да, при этом вложенность запущеного метода (самого себя) может быть произвольной.
1
75 / 61 / 29
Регистрация: 20.04.2015
Сообщений: 415
30.07.2018, 21:11
вот теперь понятно я то думал что рекурся тупо перезапескает метод
PS один фиг у меня что с ретурном что без ретурна одинаковый вывод по этому не понятно я чего он нужен
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
30.07.2018, 21:16
Цитата Сообщение от WinniPuh Посмотреть сообщение
один фиг
Запускать когда strBox.length > expectedSize. Разницу в выводе я уже показывал.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
30.07.2018, 23:56
JIeIIIa,
Метод конечно классно выглядит, мне понравился(но я не запускал), хотя я думаю что собеседника путает return, лучше бы другой for в else запихнуть.
Единственное непонятно это 3-й аргумент, expectedSize. Если он идентичный размеру массива то понятно - получаем все возможные комбинации. Вопрос, а если нет(неравен) то что он дает? Зачем нам это "волшебное число"?
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
31.07.2018, 00:08
Цитата Сообщение от ViktorFX Посмотреть сообщение
лучше бы другой for в else запихнуть
Среди
Java
1
2
3
4
5
6
7
If(...) {
   foo();   
} else { 
   bar();
   bar();
   bar();
}
и
Java
1
2
3
4
5
6
7
If(...) {
   foo();   
   return;
}
bar();
bar();
bar();
мне второй вариант больше нравится. Else добавляет вложенность.

Цитата Сообщение от ViktorFX Посмотреть сообщение
Зачем нам это "волшебное число"?
Из набора в N букв (N = strBox.length составить все комбинации, длина которых равна expectedSize. Я приводил пример вывода для N == 4 и expectedSize == 3
0
75 / 61 / 29
Регистрация: 20.04.2015
Сообщений: 415
10.08.2018, 08:52
Кликните здесь для просмотра всего текста
Java
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
69
70
@Test
    public void cobo() {
        char[] strBox = {'a', 'b', 'c', 'd', 'f'};
        DatabeseCombo compbo = new DatabeseCombo(strBox);
        ArrayList<char[]> res = compbo.getRsl();
        res.forEach(el -> {
            for (int i = 0; i < el.length; i++) {
                System.out.print(el[i] + " ");
            }
            System.out.println("");
        });
    }
 
    @Test
    public void testic() {
        char[] strBox = {'a', 'b', 'c', 'd', 'f'};
        Deque<Integer> indexes = new LinkedList<>();
        Combo makeoneReturn = new Combo();
        makeoneReturn.makeOneReturn(strBox, indexes, 3);
        Combo makeoneNONO_Return = new Combo();
        makeoneNONO_Return.makeTwoNonReturn(strBox, indexes, 3);
        //тестируем разницы никакой
        assertThat(makeoneReturn.rsl, is(makeoneNONO_Return.rsl));
 
    }
 
    private static class Combo {
        private String rsl;
 
        public String getRsl() {
            return rsl;
        }
 
        //вот сделал два метода с ретурном и без
        private void makeOneReturn(char[] arr, Deque<Integer> indexes, int expectedSize) {
            if (indexes.size() == expectedSize) {
                for (Integer i : indexes) {
                    System.out.print(arr[i] + " ");
                    rsl = rsl + arr[i];
                }
                System.out.println();
                return;
            }
            for (int i = 0; i < arr.length; i++) {
                if (!indexes.contains(i)) {
                    indexes.addLast(i);
                    makeOneReturn(arr, indexes, expectedSize);
                    indexes.removeLast();
                }
            }
        }
        private void makeTwoNonReturn(char[] arr, Deque<Integer> indexes, int expectedSize) {
 
            if (indexes.size() == expectedSize) {
                for (Integer i : indexes) {
                    System.out.print(arr[i] + " ");
                    rsl = rsl + arr[i];
                }
                System.out.println();
            }
            for (int i = 0; i < arr.length; i++) {
                if (!indexes.contains(i)) {
                    indexes.addLast(i);
                    makeTwoNonReturn(arr, indexes, expectedSize);
                    indexes.removeLast();
                }
            }
        }
 
    }

ну не понимаю зачем ретурн...
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
10.08.2018, 09:58
WinniPuh, там, где есть return максимальная длина построенное последовательности равна expectedSize. Т.е. построит что необходимо, выведет на экран и рекурсивный спуск остановится (вернемся на шаг выше).
Там, где нет return максимальная длина построенной последовательности равна количеству символов в arr. При этом точно так же на экран будет выведен результат только тогда, когда выполняется условие indexes.size() == expectedSize. Но после вывода будет построена последовательность длины expectedSize+1, expectedSize+2 и т.д. Просто Вы этого на экране не увидите.
Например, поместите в конце обоих рекурсивных метовод System.out.println("+") и сравните выводы на экран.

Для размышления:
Java
1
2
3
4
5
for(int i=0; i<1000000; i++) {
  if ( i < 3 ) {
    System.out.println(i);
  }
}
и
Java
1
2
3
4
5
6
for(int i=0; i<1000000; i++) {
  System.out.println(i);
  if ( i == 3 ) {
    break;
  }
}
Данные два куска кода работают одинаково или же чем-то отличаются?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.08.2018, 09:58

Выборка подмножества комбинаций без повторов из множества всех комбинаций перестановок
Собственно вопрос. Существует ли алгоритм нахождения без перебора уникальных комбинаций в сортированном множестве всех возможных...

Перебор всех возможных комбинаций из элементов двумерной матрицы
Собственно задача: Фирме нужно закупить n товаров. Каждый товар можно купить у одного из m продавцов. Необходим алгоритм, перебирающий...

Получение i-ого элемента массива без вычисления всех элементов (Ленивые вычисления)
Здравствуйте! Необходимо в цикле получать каждый i-й элемнент. Работаю с массивами массивов целых чисел, которые представляют всевозможные...

Найти произведение всех элементов массива и сумму всех нечетных элементов массива
Массив состоит из чисел от 1 до 200, кратных 13. a) Найти произведение всех элементов массива б) Найти сумму всех нечетных элементов...

Массивы: определение частного от деления суммы всех положительных элементов на количество всех отрицательных элементов массива
Составьте алгоритм определения частного от деления суммы всех положительных элементов на количество всех отрицательных элементов массива....


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru