Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [PHP] Сортировка массива 
V
    Опции темы
doook
Дата 7.6.2010, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 31.5.2007
Где: Украина, Киев

Репутация: нет
Всего: нет



Добрый день, помогите решить задачу.

Имеется набор неповторяющихся слов, составленных из заглавных букв английского
алфавита. Напишите программу, которая строит цепочку, состоящую из максимального
количества слов по правилу: следующее слово цепочки должно начинаться с буквы, на
которую оканчивается предыдущее слово. Цепочка может начинаться с любого слова, в
цепочке слова повторять запрещено. (Количество слов в наборе не превышает 20. Входные
данные: слова хранятся в строке с пробелом в качестве разделителя. Выходные данные:
первая строка содержит количество слов в найденной цепочке, слова в цепочке
перечисляются по одному в строке, начиная со второй строки.)


Код

$text = "explore cheat sheets that will guide you through some of \
zend studio's application development processes each cheat \
sheet is designed to help you complete a certain task by \
explaining the process step by step topics covered in the \
cheat sheets include phpdoc creation phpunit testing \
zend framework project creation usage data tools platform usage and more";

$arr = explode(" ",$text);
foreach ($arr as $val){
    if(empty($outline)){
        $outline[] = $val;
    }
    else {
        $last = $outline[count($outline)-1];
        echo $last;
        if($last{strlen($last)-1} == $val{0}){
            $outline[] = $val;
        }
    }
}
echo implode(" ",$outline);


Это сообщение отредактировал(а) doook - 7.6.2010, 09:55
PM MAIL ICQ   Вверх
bars80080
Дата 7.6.2010, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 8
Всего: 315



Код

<pre>
<?php
error_reporting(E_ALL|E_NOTICE);
$text = "explore cheat sheets that will guide you through some of zend studio's application development processes each cheat sheet is designed";

$arr = explode(' ', $text);

$res = array();
compare1($res, $arr);

function compare1(&$res, $arr, $last = '', $line = '') {
    $c = count($arr);
    for($i = 0; $i < $c; $i++) {
        $simb = substr($arr[$i], 0, 1);
        if(empty($last) || $simb == $last) {
            $newline = $line.' '.$arr[$i];
            $res[] = $newline;
            $newlast = substr($arr[$i], -1);$newarr = $arr;
            array_splice($newarr, $i, 1);//var_dump($newarr);
            compare1($res, $newarr, $newlast, $newline);
        }
    }
}
$max = 0; $str = '';
foreach($res as $v) {
    $l = strlen($v);
    if($l > $max) { $max = $l; $str = $v; }
}
?>
самая длинная строка (<?php echo $max; ?> символов):
<?php echo $str; ?>
</pre>

для 20 слов пашет нормально, для всей строки скрипт не вписывается в пределы 30 секунд
PM MAIL WWW   Вверх
doook
Дата 8.6.2010, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 31.5.2007
Где: Украина, Киев

Репутация: нет
Всего: нет



Цитата(bars80080 @ 7.6.2010,  15:21)
Код

<pre>
<?php
error_reporting(E_ALL|E_NOTICE);
$text = "explore cheat sheets that will guide you through some of zend studio's application development processes each cheat sheet is designed";

$arr = explode(' ', $text);

$res = array();
compare1($res, $arr);

function compare1(&$res, $arr, $last = '', $line = '') {
    $c = count($arr);
    for($i = 0; $i < $c; $i++) {
        $simb = substr($arr[$i], 0, 1);
        if(empty($last) || $simb == $last) {
            $newline = $line.' '.$arr[$i];
            $res[] = $newline;
            $newlast = substr($arr[$i], -1);$newarr = $arr;
            array_splice($newarr, $i, 1);//var_dump($newarr);
            compare1($res, $newarr, $newlast, $newline);
        }
    }
}
$max = 0; $str = '';
foreach($res as $v) {
    $l = strlen($v);
    if($l > $max) { $max = $l; $str = $v; }
}
?>
самая длинная строка (<?php echo $max; ?> символов):
<?php echo $str; ?>
</pre>

для 20 слов пашет нормально, для всей строки скрипт не вписывается в пределы 30 секунд

Большое спасибо.
Я ее решил по своему)

Код

<?php
$text = "design night tenns sun noob bad dino over right trim man never red duck";
$arr = explode(' ',$text);
$flag = false;
while ($flag == false){
    $counter = 0;
    foreach ($arr as $val){
        if(empty($outline)){
            $outline[] = $val;
            continue;
        }
        else {
            if(count($outline) >= 20){
                $flag = true;
                break;
            }
            foreach($outline as $data){
                if($data == $val) {
                    $val = "";
                }
            }
            $last = $outline[count($outline)-1];
            if($last{strlen($last)-1} == $val{0}){
                $outline[] = $val;
                $counter++;
                continue;
            }
        }
    }
    if($counter == 0) $flag = true;
}
echo implode(" ",$outline);
?>


Это сообщение отредактировал(а) doook - 8.6.2010, 00:39
PM MAIL ICQ   Вверх
bars80080
Дата 8.6.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 8
Всего: 315



не правильный пример, прямо скажем, он не делает ничего, кроме как убирает лишние слова.
плюс ошибки

сам попробуй свой пример для строки:

design tenns night sun noob bad dino over right trim man never red duck
PM MAIL WWW   Вверх
doook
Дата 8.6.2010, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 31.5.2007
Где: Украина, Киев

Репутация: нет
Всего: нет



И в правду, я на радостях даже не тестировал )
Ещё раз спасибо.

Это сообщение отредактировал(а) doook - 8.6.2010, 21:22
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.