xopagpuk
Профан - программист.
Решал такую:
Теперь надо решить аналогичную:
Вводим:
Получаем:
У меня получилось получить 14/18 Вариантов.теряются варианты где используется первая и третья строки.(Или грубо говоря нет ни одной комбинации, где бы использовались не рядом стоящие строки)
Подскажите как исправить программу, для получения нужного результата?
Программа:
Также надеюсь что мои задачи пригодятся будущим php-шникам)
Есть задача:
Ввести текст несколько строк по несколько слов.
Вывести все возможные варианты предложений, взяв по одному слову из каждой строки( без перемешивания). То есть:
Вводим:
Получаем:
Решение:
Ввести текст несколько строк по несколько слов.
Вывести все возможные варианты предложений, взяв по одному слову из каждой строки( без перемешивания). То есть:
Вводим:
строка1: слово1_1 слово1_2
строка2: слово2_1 слово2_2
строка3: слово3_1 слово3_2
строка2: слово2_1 слово2_2
строка3: слово3_1 слово3_2
с1_1 с2_1 с3_1
с1_1 с2_1 с3_2
с1_1 с2_2 с3_1
с1_1 с2_2 с3_2
с1_2 с2_1 с3_1
с1_2 с2_1 с3_2
с1_2 с2_2 с3_1
с1_2 с2_2 с3_2
с1_1 с2_1 с3_2
с1_1 с2_2 с3_1
с1_1 с2_2 с3_2
с1_2 с2_1 с3_1
с1_2 с2_1 с3_2
с1_2 с2_2 с3_1
с1_2 с2_2 с3_2
Код:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action = method = "get">
<input type="hidden" name="number" value="<?= $_GET['number'] ?>">
<p><textarea rows="10" cols="45" name="text" ></textarea></p>
<p><input type="submit" value="Отправить"></p>
</form>
</body>
</html>
<?php
if (isset($_GET['number'])){
$text = $_GET['text'];
$strings = explode("\n", $text); // разобьем массив на строки
$countString = count($strings);
for($i=0; $i < $countString; $i++){// а строки на слова
$strings[$i]=explode(" ",trim($strings[$i]));
}
function mixThree($strings,$intermediate=[]){
static $result=[];
$level = count($strings);
$string = array_shift($strings);
for($i = 0; $i < count($string); $i++) {
$intermediate[$level] = $string[$i];
if(!empty($strings)) mixThree ($strings, $intermediate);
if(empty($strings)) $result[] = $intermediate;
}
return $result;
}
$result = mixThree($strings);
var_dump('Итог',$result);
Вводим:
строка1: слово1_1 слово1_2
строка2: слово2_1 слово2_2
строка3: слово3_1 слово3_2
строка2: слово2_1 слово2_2
строка3: слово3_1 слово3_2
с1_1
с1_1 с2_1
с1_1 с2_2
с1_1 с3_1
с1_1 с3_2
с1_1 с2_1 с3_1
с1_1 с2_1 с3_2
с1_1 с2_2 с3_1
с1_1 с2_2 с3_2
с1_2
с1_2 с2_1
с1_2 с2_2
с1_2 с3_1
с1_2 с3_2
с1_2 с2_1 с3_1
с1_2 с2_1 с3_2
с1_2 с2_2 с3_1
с1_2 с2_2 с3_2
с1_1 с2_1
с1_1 с2_2
с1_1 с3_1
с1_1 с3_2
с1_1 с2_1 с3_1
с1_1 с2_1 с3_2
с1_1 с2_2 с3_1
с1_1 с2_2 с3_2
с1_2
с1_2 с2_1
с1_2 с2_2
с1_2 с3_1
с1_2 с3_2
с1_2 с2_1 с3_1
с1_2 с2_1 с3_2
с1_2 с2_2 с3_1
с1_2 с2_2 с3_2
с1_1
с1_1 с2_1
с1_1 с2_2
с1_1 с3_1-------------Эта строка теряется
с1_1 с3_2-------------Эта строка теряется
с1_1 с2_1 с3_1
с1_1 с2_1 с3_2
с1_1 с2_2 с3_1
с1_1 с2_2 с3_2
с1_2
с1_2 с2_1
с1_2 с2_2
с1_2 с3_1--------------Эта строка теряется
с1_2 с3_2--------------Эта строка теряется
с1_2 с2_1 с3_1
с1_2 с2_1 с3_2
с1_2 с2_2 с3_1
с1_2 с2_2 с3_2
с1_1 с2_1
с1_1 с2_2
с1_1 с3_1-------------Эта строка теряется
с1_1 с3_2-------------Эта строка теряется
с1_1 с2_1 с3_1
с1_1 с2_1 с3_2
с1_1 с2_2 с3_1
с1_1 с2_2 с3_2
с1_2
с1_2 с2_1
с1_2 с2_2
с1_2 с3_1--------------Эта строка теряется
с1_2 с3_2--------------Эта строка теряется
с1_2 с2_1 с3_1
с1_2 с2_1 с3_2
с1_2 с2_2 с3_1
с1_2 с2_2 с3_2
Программа:
Код:
function mixTwo($strings,$intermediate=[]){
static $result=[];
$level = count($strings);
$string = array_shift($strings);
for($i = 0; $i < count($string); $i++) {
$intermediate[$level] = $string[$i];
$result[] = $intermediate;
if($strings) mixTwo ($strings, $intermediate);
}
return $result;
}
Последнее редактирование: