xopagpuk
Профан - программист.
И снова здравствуйте, уважаемые. Очередной вечер сломал мозги на следующей задаче: Требуется организовать функцию, которая выводила бы все возможные комбинации из элементов массива. Пример:
Массив:
1,2,3
Выводим:
1,2,3
1,3,2
2,3,1
2,1,3
3,1,2
3,2,1
Организовать нужно, чтобы не только с 3мя элементами мог работать, но и с 4мя и с 5ю.
Сколько я не подхожу к этой задаче - не получается понять принцип ее реализации. Конечно задача требует нахождение факториала и количества массива. Но как все это сделать воедино, я не догадался.
Предварительный код.
[spoiler ]
[/spoiler]
Как я понял алгоритм следующий:
1.Выводим изначальный массива.
2.Меняем последние два элемента
3.Вывод массива.
4.Ставим первый элемент на последнюю позицию.
Повторяем $n(количество элементов) раз.
Данный цикл подходит для 3 элементов, но не для 2х и для 4х.
Как его универсализировать, и главное - как написать это в коде?
ЗЫ: Премного благодарен за все ваши конструктивные ответы.
Массив:
1,2,3
Выводим:
1,2,3
1,3,2
2,3,1
2,1,3
3,1,2
3,2,1
Организовать нужно, чтобы не только с 3мя элементами мог работать, но и с 4мя и с 5ю.
Сколько я не подхожу к этой задаче - не получается понять принцип ее реализации. Конечно задача требует нахождение факториала и количества массива. Но как все это сделать воедино, я не догадался.
Предварительный код.
[spoiler ]
Код:
function mixOne ($array)
{
for ($j = 0; $j < $f; $j++)
{
$n = count($array);//количество слов в массиве
$f = 1;
for ($i = 1; $i < $n; $i++)
{
$f = $f * $i;
}
//$f - факториал
{
echo implode(" ",$array)."<br>";
$c=$array[$f];
$array[$f]=$array[$n-1];
$array[$n-1]=$c;
}
}
}
Как я понял алгоритм следующий:
1.Выводим изначальный массива.
2.Меняем последние два элемента
3.Вывод массива.
4.Ставим первый элемент на последнюю позицию.
Повторяем $n(количество элементов) раз.
Данный цикл подходит для 3 элементов, но не для 2х и для 4х.
Как его универсализировать, и главное - как написать это в коде?
ЗЫ: Премного благодарен за все ваши конструктивные ответы.