Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2009, 16:42   #1
KEV
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 29
Печаль комбинотарика и массив

Кто может помочь с решением, есть массив (A,B,D) , задача составить из элементов массива все возможные сочетания слов. Я понимаю что это должен быть вложенный цикл for , как это реализовать никак не догоняю заранее благодарен!
KEV вне форума Ответить с цитированием
Старый 24.07.2009, 11:19   #2
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Комбинации какой-то длинны или все?
тут for'ами не обойтись рекурсия нужна
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 24.07.2009, 15:42   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

PHP код:
function checkAndPrint($i$k, &$n)
{
  if (
$n[$k]) echo $i' ';
}

$words = array('forами''обойдёмся''рекурсия''не''нужна');
$count sizeof($words);
$n array_fill(0$count 10);
$done = &$n[$count];
do
{
  for (
$i 0$n[$i]; $n[$i++] = 0);
  
$n[$i] = 1;
  
array_walk($words'checkAndPrint'$n);
  echo 
"\n";
} while (!
$done); 
Somebody вне форума Ответить с цитированием
Старый 24.07.2009, 16:28   #4
KEV
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 29
По умолчанию

спасибо, код действительно работает. Только сколько я на него не смотрел понять его так и не смог, если не сложно помогите коментариями буду очень признателен.... Точнее для полноты ощущений куда здесь пихнуть
Код:
$words = array_reverse($words);
чтобы получились дополнительные результаты.

Последний раз редактировалось KEV; 24.07.2009 в 17:07.
KEV вне форума Ответить с цитированием
Старый 25.07.2009, 00:10   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

$n - массив, представляющий число в двоичной системе. Каждая цифра соответствует слову, если 1, то оно есть в текущей комбинации, если 0, то нет. При каждой итерации это число увеличивается на единицу и выводится текущая комбинация. Если происходит переполнение, то выходим из цикла.
Вообще там надо сначала вывод, потом увеличение надо бы, это как бы я ошибся, но учитывая, что обращение к отсутствующему элементу в массиве слов в PHP даст null, то ничего страшного, просто пустая комбинация будет в конце, но лучше исправить, чтобы как надо было.
Цитата:
Сообщение от KEV Посмотреть сообщение
Точнее для полноты ощущений куда здесь пихнуть
Код:
$words = array_reverse($words);
чтобы получились дополнительные результаты.
???
Somebody вне форума Ответить с цитированием
Старый 28.07.2009, 16:55   #6
KEV
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 29
По умолчанию

ну я имел ввиду то что в массиве ('a','b') могут быть сочетания не только ab но и ba. хотел перевернуть массив чтобы получились такие результаты.
KEV вне форума Ответить с цитированием
Старый 28.07.2009, 17:50   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Сочетание
Цитата:
Сочетанием из n по k называется набор k элементов, выбранных из данных n элементов. Наборы, отличающиеся только порядком следования элементов (но не составом), считаются одинаковыми, этим сочетания отличаются от размещений.
Так что уточни, что надо.
Somebody вне форума Ответить с цитированием
Старый 28.07.2009, 20:39   #8
KEV
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 29
По умолчанию

Тоесть если я правильно понял в данном случае сочетания AB будет равно сочетанию BA, что для меня не так. Наверное с самого начала не так как надо вопрос задал. Меня интересуют конкретно все сочетания слов из данных массива...
KEV вне форума Ответить с цитированием
Старый 29.07.2009, 14:18   #9
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от KEV Посмотреть сообщение
в данном случае сочетания AB будет равно сочетанию BA, что для меня не так
Цитата:
Сообщение от KEV Посмотреть сообщение
Меня интересуют конкретно все сочетания слов из данных массива...
А что, это не все сочетания слов?
Somebody вне форума Ответить с цитированием
Старый 29.07.2009, 16:16   #10
KEV
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 29
По умолчанию

С массивом в два ключа да, все сочетания... а если взять пример с тремя ключами то переворот массива не поможет.
KEV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив Paul Oakenfold Паскаль, Turbo Pascal, PascalABC.NET 1 24.04.2009 19:31
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06
Массив на Си Карол Помощь студентам 2 12.11.2008 22:44
Массив Elizaveta Паскаль, Turbo Pascal, PascalABC.NET 1 10.11.2008 02:35
Массив! vlad1991 Паскаль, Turbo Pascal, PascalABC.NET 4 06.11.2008 22:09