|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Генератор комбинаций
Есть произвольное количество строк с произвольным количеством символов (например в memo). Необходимо вывести (например в другое memo) все возможные комбинации таким образом: первый символ может быть любым из первой строки, второй - любым из второй и т.д.
условно имеем: 123 456 789 должны получить: 147 148 149 157 158 159 167 168 169 247 248 249 257 258 259 267 268 269 347 348 349 357 358 359 367 368 369 помогите пожалуйста, с ходу не придумал как накидать произвольное кол-во вложенных циклов. |
#2
|
|||
|
|||
Это одна из задач, решаемых с помощью динамического программирования. Т.е. тебе нужно организовать некоторую дополнительную структуру данных и алгоритм, обрабатывающий эту струкруру для достижения нужного результата.
Например (лень писать полный код): 1. создаем массив Integer, кол-во элементов равное кол-ву строк в Memo. 2. инициируем каждый элемент единичкой. 3. Теперь делаем 1 цикл который берет число из последний ячейки, по нему выбираем цифру из соотв. строки Memo. Если это последнее число, то переставляем на начало и увеличиваем счетчик следующей ячейки, а текущую сбрасываем в начальное значение. Так вот и перебираем, пока не переберем все, т.е. пока не потребуется переставить на начало самую первую ячейку. Может сумбурно объяснил... Да, это все из предположения, что длинна всех строк одинаковая. Если разная, то надо еще доп. ограничеие добавить, т.е. массив будет не просто из счетчиков, но и еще и хранить длинну строки для контроля. |