Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск недостающего числа 
V
    Опции темы
Leklerk
Дата 3.10.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 31.7.2009
Где: Санкт-Петербург

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



Не понимаю, почему не работает функция. Она принимает массив, состоящий из ряда 1,2,...,n, в котором пропущено одно число, и должна возвращать недостающее число.
Код

function f_search_2($arr)
{
    $max = max($arr);
    $count = count($arr);
    $flag = true;
    
    for ($j=1; $j<=$max; $j++)
    {
        for ($i=0; $i<=$count-1; $i++)
        {
            if ($arr[$i] == $j)
            {
                $flag = false;                
                break;
            }
        }
        if ($flag == true)        
            $missed = $j;
    }
    return $missed;        
}

$mass = array(1,2,3,4,5,7,8,9,10);
echo f_search_2($mass); 

PM MAIL ICQ   Вверх
bars80080
Дата 3.10.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Код

function f_search_2($arr) {
    $max = max($arr);
    $min = min($arr);
    for($i = $min, $fsum = 0; $i <= $max; $i++) { $fsum += $i; }
    $rsum = array_sum($arr);
    $r = $fsum - $rsum;
    return $r;
}


Это сообщение отредактировал(а) bars80080 - 3.10.2009, 14:01
PM MAIL WWW   Вверх
Leklerk
Дата 3.10.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 31.7.2009
Где: Санкт-Петербург

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



bars80080 , вопрос не в том, чтобы написать такую функцию. Я не вижу, что неправильно в том коде... 
PM MAIL ICQ   Вверх
NLspieler
Дата 3.10.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

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



Код

<?php

function f_search_2($arr)
{
    $max = max ($arr);
    $min = min ($arr) ;
    for ($n = $min ; $n <= $max ; $n++)
    {
        $array_full[] = $n ;
    }
    
    return array_diff ( $array_full , $arr ) ; 
}

$mass = array(0,2,3,4,5,7,8,9,10);
print_r ( f_search_2($mass) ); 


?>


Это сообщение отредактировал(а) NLspieler - 3.10.2009, 14:11
PM MAIL   Вверх
bars80080
Дата 3.10.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



дык, я его и исправил. всё что выкинул - неправильно
PM MAIL WWW   Вверх
Leklerk
Дата 3.10.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 31.7.2009
Где: Санкт-Петербург

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



Спасибо, NLspieler, у меня есть работающий вариант. Скажите лучше, где ошибка в моем коде?
PM MAIL ICQ   Вверх
NLspieler
Дата 3.10.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

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



Кстати, можно вообще без цикла.

Код

function f_search_2($arr)
{
    $array_full = range( min($arr), max($arr) ) ;
    return array_diff ( $array_full , $arr ) ; 
}

$mass = array(0,2,3,4,5,7,8,9,10);
print_r ( f_search_2($mass) ); 


Добавлено через 8 минут и 17 секунд
Цитата(Leklerk @  3.10.2009,  14:11 Найти цитируемый пост)
Скажите лучше, где ошибка в моем коде?

Ошибка в слишком сложном подходе к решению задачи, 
в использовании 2 циклов, там где нужен всего 1, и то не обязательно.

Это сообщение отредактировал(а) NLspieler - 3.10.2009, 14:16
PM MAIL   Вверх
bars80080
Дата 3.10.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



NLspieler, пожалуй, это наиболее оптимальный вариант


Leklerk, всё ваше сравнение умещается вот в этой записи: array_diff

был бы у меня список функций, тоже бы написал
PM MAIL WWW   Вверх
youri
Дата 3.10.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

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



если не можешь без отладки найти ошибку, значит надо именно ей и заняться ;)
PM   Вверх
bars80080
Дата 3.10.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(Leklerk @  3.10.2009,  14:11 Найти цитируемый пост)
у меня есть работающий вариант
Цитата(Leklerk @  3.10.2009,  13:49 Найти цитируемый пост)
Не понимаю, почему не работает функция

если работающий, зачем было спрашивать? если нет, почему вы пытаетесь его пропихнуть?
PM MAIL WWW   Вверх
NLspieler
Дата 3.10.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

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



Цитата(bars80080 @  3.10.2009,  14:23 Найти цитируемый пост)
был бы у меня список функций, тоже бы написал


http://www.php.net/manual/en/ref.array.php

PM MAIL   Вверх
Leklerk
Дата 3.10.2009, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 31.7.2009
Где: Санкт-Петербург

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



Цитата

если работающий, зачем было спрашивать? 

Сказал же - интересно где ошибка.
PM MAIL ICQ   Вверх
bars80080
Дата 3.10.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



NLspieler, я отказываюсь копировать ссылку со списком функций на домашний комп

или ты думаешь, что я этот пример проверял?
PM MAIL WWW   Вверх
sTa1kEr
Дата 5.10.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

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



Цитата(Leklerk @  3.10.2009,  15:05 Найти цитируемый пост)
Я не вижу, что неправильно в том коде...  

Алгоритм не правильный.

Кстати, решение bars80080'а намного эффективнее.
PM MAIL   Вверх
NewDima
Дата 5.10.2009, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

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



К слову сказать, цикл bars80080-а тоже можно оптимизировать
вместо
Код

for($i = $min, $fsum = 0; $i <= $max; $i++) { $fsum += $i; }

Код

$fsum = $max*($max + 1)/2 - $min*($min-1)/2

Получится
Код

function f_search_2($arr) {
    return ($max = max($arr))*($max+1)/2 - array_sum($arr) + ($min = min($arr))*($min - 1)/2;
}

в общем, вспоминаем математику

Это сообщение отредактировал(а) NewDima - 5.10.2009, 11:58
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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