За последние 24 часа нас посетили 62952 программиста и 1679 роботов. Сейчас ищут 925 программистов ...

Помогите составить алгортим

Тема в разделе "PHP для новичков", создана пользователем drakonik999, 20 ноя 2017.

  1. drakonik999

    drakonik999 Активный пользователь

    С нами с:
    5 сен 2017
    Сообщения:
    156
    Симпатии:
    0
    Хочу сказать всем спасибо кто оказывает поддержку!

    $pr = "коля вася инна рома";
    $pr = explode(" ", $pr);
    Надо чтобы получался вот такой результат
    Первый перебор
    $a = коля
    $a = вася
    $a = инна
    $a = рома
    Второй перебор
    $a = коля вася
    $a = коля вася инна
    $a = коля вася инна рома
    Третий перебор
    $a = вася инна
    $a = вася инна рома
    Четвертый перебор
    $a = инна рома

    Все!

    (только это как пример, там может быть и больше слов, значит и больше переборов )
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    простейший алгоритм.... генерируете двоичные числа длинны N путем +1 к предыдущему результату
    от
    0000000....0 - длина N до
    11111111....1 - длина N
    где 1 в соотв позиции будет означать элемент массива... например если Вася, Петя, Катя - то 101 - это Вася, Катя
    я ведь правильно понимаю - вам неважно Катя, Петя или Петя, Катя - то есть порядок .. главное состав группы?
    Вот вам и будут точно всевозможные варианты - от пустого - до самого массива

    а вообще есть целый раздел математики - комбинаторика, ее даже в школе начинают изучать ... там довольно доходчиво описаны такие штуки..... и называются они не переборы (это гитарные переборы бывают) а сочетания, сочетания без повторений, размещения итд.... там же есть формулы - которые определяют конечное количество таких сочетаний.... фигурируют факториалы... и уже при N = 30 там что то заоблачное начнается для компов) по крайней мере стандартных скриптов пхп
     
  3. drakonik999

    drakonik999 Активный пользователь

    С нами с:
    5 сен 2017
    Сообщения:
    156
    Симпатии:
    0
    важней порядок
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
    вроде автору уже объясняли, не... даже код давали. Все просрал.
     
  6. drakonik999

    drakonik999 Активный пользователь

    С нами с:
    5 сен 2017
    Сообщения:
    156
    Симпатии:
    0
    Почитай внимательно что я раньше хотел и что сейчас, это разное
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
  8. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @drakonik999, тут придется на два этапа разбивать: сначала вывести все элементы по одному (один цикл), а потом комбинации не менее 2х (в два цикла)
     
  9. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @drakonik999, уточню предыдущего оратора: "в три цикла" :)
    PHP:
    1. $arr = range(1, 7);
    2. foreach($arr as $value) {
    3.     echo $value.' ';
    4. }
    5. echo '<br><br>';
    6. $N = count($arr);
    7. for($i = 0; $i < $N-1; $i++) {
    8.     for($k = $i+1; $k < $N; $k++) {
    9.         for($j = $i; $j <= $k; $j++) {
    10.             echo $arr[$j].' ';
    11.         }
    12.         echo '<br>';
    13.     }
    14.     echo '<br>';
    15. }
     
  10. drakonik999

    drakonik999 Активный пользователь

    С нами с:
    5 сен 2017
    Сообщения:
    156
    Симпатии:
    0
    Хорошо работает! Сам пытался так что то много циклов получилось
     
  11. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Sail, у меня получилось в два)
    PHP:
    1. $a = 'а б в г';
    2. $b = explode(' ', $a);
    3. $n = count($b);
    4. foreach($b as $d)
    5. {
    6.     echo $d . '<br>';
    7. }
    8. foreach($b as $i => $c)
    9. {
    10.     for ($k=2; $k < ($n - $i + 1); $k++)
    11.     {
    12.         echo implode(' ', array_slice($b, $i, $k)) . '<br>';
    13.     }
    14. }
    последний Ваш цикл я заменил на array_slice.