Xwab
Форумыnavigate_nextПрограммирование на PHP

Задачи по php
Сообщения
M0rbid

inkognito, #143

14 Май 2010, 10:49
M0rbid

Dezer,
не хватает

2143
24хх
31xx
3214
4321
42xx
1432
13xx

14 Май 2010, 10:52
SouR

вышe эт чe

14 Май 2010, 21:38
M0rbid

Ну что, все здаются? Писать решение? (посты 141,147)

19 Май 2010, 23:53
Gemorroj

function fun($str)
{
    $all = factorial(iconv_strlen($str));
    $out = array($str);

    for ($i = 1; $i < $all; ++$i) {
        $tmp = str_shuffle($str);
        while (true) {
            if (array_search($tmp, $out) === false) {
                $out[$i] = $tmp;
                break;
            }
            $tmp = str_shuffle($tmp);
        }
    }
    return $out;
}

function factorial($n)
{
    return ($n <= 1) ? 1 : $n * factorial($n - 1);
}

print_r(fun(123));
но не обрабатываются ситуации в случае если в строке имеются повторяющиеся символы. M0rbid - решение?)

20 Май 2010, 13:03
M0rbid

Gemorroj, да) но не оптимально, элемент случайности плох. Загадывай

20 Май 2010, 18:30
Gemorroj

что значит "элемент случайности плох" - она как бы есть или ее как бы нет, третьего тут не дано)
а про решение - это не вопрос, а просьба выложить нормальное решение задачи. а то что этот вариант не оптимален эт понятно.

20 Май 2010, 18:49
M0rbid

Gemorroj, значит "плохо что она есть".
рекурсивный вариант:

function func($str, $pref = '')
{
   if($str == '')
   {
      echo $pref.' ';
      return;
   }

   $length = strlen($str);
   $arr = str_split($str);

   for($i = 0; $i < $length; $i++)
   {
      $arr2 = $arr; unset($arr2[$i]);
      $str2 = implode('', $arr2);

      func($str2, $pref.$str[$i]);
   }
}

func('абв');

//абв авб бав бва ваб вба

20 Май 2010, 20:22
Gemorroj

M0rbid, не катит, а как же юникодовость?

20 Май 2010, 20:37
Gemorroj

и так же нету обработки ситуации когда символы повторяются)

20 Май 2010, 20:39
Ответить на тему