![]() |
|
![]() ![]() ![]() |
|
Ogurtsova |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 2.7.2009 Репутация: нет Всего: нет |
Дорогие дузья!
Проблема состоит в следующем: есть несколько групп (все элементы текстовые, но это не принципиально): свойство1, свойство2, свойство3, .. свойствоN (количество групп задается пользователем, зарание мы не знаем) для каждой группы существует свой набор значений, тоже заранее неопределенный свойство1 -> {A(1), A(2),..A(m1)} cвойство2 -> {B(1), B(2),..B(m2)} .. свойствоN -> {X(1),X(2),..X(mn)} необходимо создать список уникальных сочетаний, причем порядок групп в отдельном взятом элементе строгий и известен например, дано: цвет. размер. фактура цвет -> {красный, желтый, синий, черный} размер -> {большой, маленький} фактура -> {металл, пластик, дерево} необходимо сгенерировать список: красный. большой. металл красный. большой. пластик красный. большой. дерево красный. маленький. металл красный. маленький. пластик красный. маленьский. дерево желтый. большой. металл желтый. большой. пластик ... и т.д. проблема заключается в том, что количесвто групп (свойств) заранее неизвестно, как и количесвто элементов в каждой группе. никак не могу найти простое решение. очень буду благодарна помощи! |
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
Да по-разному можно.
Можно циклами for c рекурсией. (Наверное нагляднее всего.) От первой группы до последней. Можно как при устном счёте - меняем значение в последней группе на следующее, если достигнуто последнее значение меняем предпоследнее и т.д. |
|||
|
||||
Ogurtsova |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 2.7.2009 Репутация: нет Всего: нет |
да, я все это понимаю и могу реализовать при заранее известном количестве свойств. а в данном случае я не знаю, сколько свойств будет: два или десять, и сколько в таком случае циклов for нужно или как это организовать, чтобы было не важно количество циклов. |
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
Как-то так
|
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Ну по-любому у тебя получается двумерный массив... наиболее просто сделать так: первая размерность = количеству свойств, вторая = максимальному количеству значений свойства. Где значений меньше - там соответственно Null-ы. И обрабатывай. В рекурсивную функцию передаёшь текущий вектор уже выбранных номеров записей по колонкам и номер следующей колонки. Если она последняя - организуешь вывод, если нет - рекурсивный вызов, добавляя в цикле каждую ячейку очередной колонки и увеличив на 1 номер колонки следующей.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |