![]() |
Перестановки чисел
Помогите запрограммировать такую штуку: вводится число классов, в каждом классе число элементов (например числа). Нужно получить строки заданной длины N из всевозможных перестановок этих чисел. Например, 4 класса, в них 2, 2, 1, 1 элементов: [1,1], [2,2], [3], [4], длина строки =3. Должно получиться:
112 113 114 121 122 123 124 131 132 134 141 142 143 211 212 213 214 221 223 232 234 241 242 243 311 312 314 321 322 324 341 342 411 412 413 421 422 423 431 432 Вся проблема в том, что заранее неизвестна длина строки N, и поэтому нельзя сделать просто определенное число вложенных циклов. Помогите пожалуйста!! очень нужно |
рекурсия?
|
Белая
желательно нет еще можно так сформулировать: есть массив элементов, например [1,1,2,2,3,4], нужно сделать все сочетания какой-то длины, например 3 |
Цитата:
и чем тебе не нравится рекурсия? |
Marleny,
2.718281828459045 (exp) [Сделайте всё за меня] |
Я по-моему вполне понятно написала, что я делала (вложенные циклы), в чем проблема (неизвестно их количество). Я прошу предложить какой-то алгоритм, или подсказать идею реализации. Если кто-то считает, что я просто прошу все сделать за меня и ничего не пытаюсь сделать сама, то это не так. Хотя, конечно, каждый имеет право на собственное мнение. Единственная просьба - если не хотите или не можете предложить что-то конкретно по задаче, не стоит тыкать меня в тему "делай все за меня" или наподобие.
Белая Я тебе поработать не предлагаю, а прошу помочь. |
я же говорю РЕКУРСИЯ.
у меня всё получилось. других выходов пока не вижу. |
Можно и без рекурсии, но алгоритм сложнее.
|
Цитата:
|
Цитата:
|
Цитата:
|
я как-то вывел формулу:) может пригодится
если даны три числа то комбинаций может быть 6: 123 132 213 231 312 321 получается: кол-во комб = 3*2. если 4 числа то 4*3*2, если 5 то 5*4*3*2 ну и т.д. я все проверил! |
Цитата:
|
Цитата:
мы это в школе проходили :))) |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
iNils
то есть ты предлагаешь делать след. образом (arr=[1,1,2,2,3,4]), используя индексы: 012, увеличиваем 2 пока не станет равной 5,т.е: 012, 013, 014, 015 потом 5-->0, предыдущая цифра (1) увеличивается на единицу 020, 021, 022, 023и т.д. а как в таком случае отлавливать ситуации, когда индексы повторяются? (020, 022,...) |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
человек высказал идею...
|
Цитата:
|
Цитата:
|
Цитата:
|
Я нашла решение своей задачи. С помощью рекурсии. Всем спасибо, кто помог, вопрос решен, если кому-то интересно, вот алгоритм решения:
Начальный массив элементов: arr1=[1,1,2,2,3,4] Длина строки: <=N Формируем массив - элемент которого есть число одинаковых цифр в arr1: arrIndex1=[2,2,1,1] st1 - строка, в которую накапливаем цифры. При вызове функции необходимо указывать длину на 1 больше, чем нужно на самом деле функция Цикл (N, st1, arrIndex1); var st2:string; arrIndex2: тип такой же, как arrIndex1; { st2=st1; arrIndex2=arrIndex1; if (N>1) { {for (i=1; i<=arrIndex1.length(); i++) {if (arrIndex1[i]>0) {arrIndex1[i]--; st1=st1+i; вывод st1; Цикл(N-1, st1, arrIndex1); st1=st2; arrIndex1=arrIndex2 } } } } } |
Цитата:
за русский в коде убила бы.. |
Цитата:
Цитата:
|
Белая
Цитата:
Вам, девушка, чрезмерная агрессия по жизни не мешает? Мало того, что единственным словом по теме было упоминание о рекурсии, так и после того, как тему можно закрыть, все равно какие-то реплики проскакивают не совсем понятные. Не нравится, не ешь, как говорится. |
Прошу модераторов закрыть тему
|
Цитата:
|
| Часовой пояс GMT +4, время: 16:14. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.