[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите решить задачу на php
RiDicK
мысли вроде есть как сделать, а вот знаний нету.
Цитата

На вход программе подаются сведения о ячейках автоматической камеры хранения багажа. В первой строке задана текущая дата: через точку два целых числа, соответствующие дню (от 01 до 31 – ровно 2 символа) и месяцу (от 01 до 12 – ровно 2 символа). Во второй строке сообщается количество занятых ячеек N, которое не меньше 3, но не превосходит 1000. Каждая из следующих N строк имеет следующий формат: <номер ячейки> <дата сдачи багажа>, где <номер ячейки> – четырехзначное число, <дата сдачи багажа> – через точку два целых числа, соответствующие дню (от 01 до 31 – ровно 2 символа) и месяцу (от 01 до 12 – ровно 2 символа). Номер ячейки и дата сдачи багажа разделены одним пробелом. Сведения отсортированы в порядке номеров ячеек.
Время хранения багажа – трое суток. Требуется написать как можно более эффективную программу, которая выведет номера ячеек, в которых багаж хранится заведомо больше трех суток – то есть разница между датой сдачи багажа и текущей датой составляет 4 и более дней. Номера ячеек следует выводить в хронологическом порядке сдачи багажа.
Багаж мог сдаваться только в текущем или предыдущем месяце текущего календарного года (если текущий месяц январь, то данные о сдаче багажа в декабре прошлого года отсутствуют). Количество дней в каждом из месяцев текущего года следующее: январь – 31, февраль – 28, март – 31, апрель – 30, май – 31, июнь – 30, июль – 31, август – 31, сентябрь – 30, октябрь – 31, ноябрь – 30, декабрь – 31. Все входные данные корректны.
Пример входных данных:
04.06
3
1000 01.06
1001 31.05
2007 21.05
Результат работы программы для этого примера
2007
1001




Спустя 1 час, 31 минута, 45 секунд (24.05.2009 - 08:07) twin написал(а):
Ну давай мысли выкладывай, раз есть. Будем разбираться.

Спустя 1 час, 50 минут, 45 секунд (24.05.2009 - 09:58) RiDicK написал(а):
ну значит подключаем файл
PHP
$fh=fopen("include.txt""r");

далее както надо занести в переменные
PHP
и
PHP
текущий месяц и число, далее продолжаем обрабатывать данные
PHP
$n=0;
while(!
feof($fh)) {
$n=$n+1;
$stroki[n]=fgets($fh);
}
x=stroki[2];///размерность будущего массива с ячейками
for($n=3$n<=x$n++)
{
$yacheyki[n-2]=$stroki[n];///таким образом избавились от первых двух строчек
}

в итоге имеем массив типа:
1000 01.06
1001 31.05
2007 21.05
теперь я бы его преобразовал в 2 других массива
PHP
и
PHP
, которые будут содержать индексы в виде номеров ячеек 1000,1001,2007 и тп.
теперь сравниваем все значения массивов $days и $months с переменными $day и $month, вот тут не могу придумать как сделать правильно, ну в общем основные моменты, не понятные мне я рассказал huh.gif

Спустя 2 минуты, 45 секунд (24.05.2009 - 10:01) Guest написал(а):
извените второй мой пост тут щас исправлю smile.gif

ну значит подключаем файл
PHP
$fh=fopen("include.txt""r");

далее както надо занести в переменные
$day
и
$month
текущий месяц и число, далее продолжаем обрабатывать данные
PHP
$n=0;
while(!
feof($fh)) {
$n=$n+1;
$stroki[n]=fgets($fh);
}
x=stroki[2];///размерность будущего массива с ячейками
for($n=3$n<=x$n++)
{
$yacheyki[n-2]=$stroki[n];///таким образом избавились от первых двух строчек
}

в итоге имеем массив типа:
1000 01.06
1001 31.05
2007 21.05
теперь я бы его преобразовал в 2 других массива
$months
и
$days
, которые будут содержать индексы в виде номеров ячеек 1000,1001,2007 и тп.
теперь сравниваем все значения массивов $days и $months с переменными $day и $month, вот тут не могу придумать как сделать правильно, ну в общем основные моменты, не понятные мне я рассказал huh.gif

Спустя 1 час, 57 минут, 21 секунда (24.05.2009 - 11:58) twin написал(а):
А почему еа файлах, это условие или просто? С применением баз данных проще ведь гораздо.

Спустя 13 минут, 2 секунды (24.05.2009 - 12:11) RiDicK написал(а):
видите ли в чём дело, это пример из с4 в егэ по информатике и там указано что по-любому должен быть на входе файл smile.gif

Спустя 14 минут, 56 секунд (24.05.2009 - 12:26) RiDicK написал(а):
кой чего нащёт проверки условий накидал
PHP
for( $n=1; $n<=30; $n++){
if ((($month-$months[n])<=1)and($month-$months[n]>=(-1)))
{
///вот тут както $days надо обработать
}
}

только всё равно не догоняю, как мне массив $yacheyki разбить на 2 массива

Спустя 4 часа, 56 минут, 21 секунда (24.05.2009 - 17:23) twin написал(а):
Не, ты слишком сложным путем пошел. Давай по порядку. Сначала считай весь файл в массив построчно. Не так мудро, а просто функцией file();
Вобщем вот тебе решение, объяснять не буду, а то ты так не сдаш smile.gif нифига. Поройся в мануале, посмотри что делают эти функции. (если действительно оно надо)
PHP
<?
$array file("1.txt");
$date_chec strtotime('2009-'.preg_replace("#(\d+?)\.(\d+)#","$2-$1",array_shift($array)));
$num array_shift($array);
$new_arr = array();
foreach(
$array as $str)
{
$arr_str explode(" ",$str);
$date strtotime('2009-'.preg_replace("#(\d+?)\.(\d+)#","$2-$1",$arr_str[1]));
if(
$date  60*60*24*$date_chec)
$new_arr[$date] = $arr_str[0];
}
ksort($new_arr);
file_put_contents('result.txt',implode("\n",$new_arr));


PS Не заметил, что по дате надо сортировать. Сейчас правильно.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.