![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
pupil |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Продвинутые Сообщений: 6 Регистрация: 16.11.2008 Город: Казахстан ![]() |
Входной файл cool.in
Выходной файл cool.out Имеются минимальные суточные температуры за N дней (1<=N<=10000). Определить продолжительность периода в течении которого ежедневно были заморозки. Входные данные В первый строке записано число N - кол. дней. Во второй - минимальные суточные температуры, разделенные пробелами. Выходные данные Число - длинна наибольшего периода на протяжении которого были заморозки Пример Cool.in 10 4 -5 -4 -2 -10 0 1 -2 -1 1 Cool.out 4 |
![]() ![]() |
creer |
![]()
Сообщение
#2
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
Проходим по массиву. В момент перехода с "+" на "-" начинаем считать количество элементов, при переходе с "-" на "+" сравниваем с предыдущим таким значением. Не забыть про края только. Ничего принципиально сложного (IMG:style_emoticons/default/smile.gif)
|
pupil |
![]() ![]()
Сообщение
#3
|
Новичок ![]() Группа: Продвинутые Сообщений: 6 Регистрация: 16.11.2008 Город: Казахстан ![]() |
написал для нахождения общего кол-ва отрицательных элементов, не работает, что не так?
как сделать чтобы находил не сумму всех, а только тех которые идут один за другим. вот код: Код Program zamorozki; Type day = 1..10000; var n: day; d: array [-10000..10000] of integer; x,i: integer; f,f1: text; begin assign(f,'cool.in'); reset(f); assign(f1,'cool.out'); rewrite(f1); read(f,n); for i:=1 to n do begin readln(f,d[i]); end; x:=0; for i:=1 to n do if d[i]<=0 then x:=x+1; writeln(f1,x); close(f); close(f1); end. |
creer |
![]()
Сообщение
#4
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
Возможно нужно написать вместо read(f,n); - readln(f,n); а вместо readln(f,d[i]); - read(f,d[i]);
Массив не обязательно начинать с -10000 (IMG:style_emoticons/default/smile.gif) я бы написал как-то так Граничные условия d[0]:=1; d[n+1]:=1; переменные curr:=0; max:=0; Затем цикл Код for i:=1 to n do begin if (d[i-1]>0) and (d[i]<=0) then curr:=0; if (d[i]<=0) then curr:=curr+1; if (d[i]<=0) and (d[i+1]>0) then if (curr>max) then max:=curr; end; В переменной max должен быть максимальный период. Писал сразу здесь, может что-то пропустил (IMG:style_emoticons/default/smile.gif) |
Julia |
![]()
Сообщение
#5
|
Ассистент ![]() ![]() ![]() ![]() Группа: Julia Сообщений: 593 Регистрация: 23.2.2007 Город: Улан-Удэ Учебное заведение: БГУ Вы: преподаватель ![]() |
Вы не можете описать массив с таким диапазоном индексов. Лучше вообше без массива обойтись.
... readln; read(temp); max:=0; While not eof(f) do begin while (temp>0) and not eof(f) do read(temp); if temp<=0 then begin curr:=0; while (temp<=0) and not eof(f) do begin inc(curr); read(temp) end; if curr>max then max:=curr end; ... Не проверяла, может что-то пропустила |
pupil |
![]() ![]()
Сообщение
#6
|
Новичок ![]() Группа: Продвинутые Сообщений: 6 Регистрация: 16.11.2008 Город: Казахстан ![]() |
Спасибо большое что помогли, хотя еще кое что исправлять пришлось. А массив от -10000 это просто так, оно в принципе роли не играет (IMG:style_emoticons/default/smile.gif)
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 25.5.2025, 21:26 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru