Меню сайта

Категории раздела
Готовимся к олимпиаде по программированию (задачи взяты с сайта http://olimpiada.com.ru) [36]
Решение олимпиадных задач по программированию
Готовимся к олимпиаде по математике [3]
Решение олимпиадных задач по математике

Мини-чат

Наш опрос
Уважаемый посетитель сайта, к какой категории вы себя относите?
Всего ответов: 5525

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Главная

Регистрация

Вход
Вы вошли как Гость | Группа "Гости" | RSS


Личный сайт учителя математики и информатики

Фоновой Натальи Леонидовны



Пятница, 29.03.2024, 16:33
Главная » Файлы » Внеурочная деятельность » Готовимся к олимпиаде по программированию (задачи взяты с сайта http://olimpiada.com.ru)

Самая длинная цепочка
14.02.2012, 08:45

Условие:
Дана вещественная таблица a[1], a[2],...,a[1000]. Определить максимальное количество подряд идущих положительных элементов последовательности, не прерываемых ни нулями, ни отрицательными элементами. Напечатать найденный фрагмент.

Технические условия:
Стандартные.

Примеры входных и выходных файлов:
Отсутствуют.

Решение:
Идея решения. Движемся вдоль массива. Фиксируем начало и конец "положительного” фрагмента и запоминаем его длину, индексы первого и последнего элементов. Аналогично поступаем со следующим фрагментом ( если он есть!). Если следующий фрагмент длиннее предыдщего, то помним его начало, конец и длину. Так ( за один проход!) проходим по всему массиву и на финише имеем то, что позволит нам напечатать интересующий нас фрагмент. Комментарии в исходнм тексте позволят до конца уяснить решение.

const
max = 100; {сколько элементов в массиве}
var
a:array[1..max] of integer; {исследуемый массив}
maxstart,maxstop,i,len,start,stop:integer;
begin
randomize; {заполняем массив случайными числами }
for i:=1 to max do
begin
a[i]:=random(5);
a[i]:=a[i]-1; {чтобы были числа меньше 0}
write(a[i],' ');
end;
i:=1;
maxstart:=0; {начало искомого фрагмента}
maxstop:=0; {конец искомого фрагмента}
len:=0; {текущая длина фрагмента}
while i<=max do
begin
while (i<=max) and (a[i]<=0) do {ищем начало фрагмента...}
inc(i);
start:=i; {запоминаем начало фрагмента}
while (i<=max) and (a[i]>0) do {ищем конец фрагмента}
inc(i);
stop:=i-1; {запоминаем конец фрагмента}
if len<stop-start
then begin {текущий фрагмент длиннее всех предыдущих}
len:=stop-start;
maxstart:=start;
maxstop:=stop;
end;
end;
writeln;
if maxstop=0 then writeln('Нет положительных элементов')
else
begin
writeln('Найденa последовательность от ',maxstart,' до ',maxstop);
for i:=maxstart to maxstop do
begin
write(a[i],' ');
end;
end;
end.
Категория: Готовимся к олимпиаде по программированию (задачи взяты с сайта http://olimpiada.com.ru) | Добавил: admin
Просмотров: 1182 | Загрузок: 0 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск

Кнопка сайта

Одна кнопка

время жизни сайта

Сайт участвует
конкурс сайтов 

Новости образовани

Фраза дня

Web-мастеру

OperaFirefoxGoogle ChromeDownload Master
QIPSkypeµTorrentTeamViewer
Dr.Web CureITAvira AntiVirTotal CommanderCDBurnerXP
PicasaIrfanViewCheMaxDAEMON Tools
AIMPKMPlayerBSplayerK-Lite Codec Pack

Установить себе такой Блок
Скрипты и HTML для uCOz

Раскрутка сайта
Graffiti Decorations(R) Studio (TM) Site Promoter

Copyright MyCorp © 2024
/td>