Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2011, 21:58   #1
amm11
 
Регистрация: 08.03.2010
Сообщений: 3
По умолчанию Однопроходные алгоритмы

Дано целое число N и набор из N целых чисел, содержащий только
нули и единицы. Найти номер элемента, с которого начинается самая
длинная последовательность одинаковых чисел, и количество элементов
в этой последовательности. Если таких последовательностей несколько,
то вывести номер первой из них.
Помогите пожалуйста разобраться в задачке, хотя эта тема поднималась на форуме, но окончательного решения так и не получилось. Не пойму, как определить, с какого элемента начинается первая наибольшая последовательность. Вот код:
Код:
var a,b,i,n,k,max,j:integer;
begin
write('Размер набора чисел  n = ');
read(n);writeln('Ввести первое число последовательности ');
readln(b);
k:=1; max:=1; j:=0;
for i:=2 to n do 
begin
read(a);
if a=b then begin k:=k+1; end else begin b:=a; k:=1;end;
{ *сравниваем первое число со вторым,подсчитываем количество одинаковых 
чисел, иначе сбрасываем счетчик,а начальному числу присваиваем значение
 отличного числа, чтобы считать Эти числа*}
if (k>=max)  then begin max:=k; j:=i+1-k; end;
{после выхода из сравнения, смотрим на наибольшую последовательность.
Если новая больше то её переписываем вместо старой, и, тут же считаем начало самой
* длинной последовательности}
end;
writeln;
write(j,' - № элемента, с которого начинается самая большая последовательность');
writeln;
writeln(' равная ',max,' числам');
end.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.06.2011 в 08:41.
amm11 вне форума Ответить с цитированием
Старый 19.06.2011, 23:02   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Я бы как-то так делал:
Код:
read(n);
max:=1; lastchar:=1; ind:=1;
for i:=1 to n do
begin
   write('Enter element ', i, ': ');
   readln(b);
   if b=lastchar then c:=c+1 else c:=1;
   lastchar:=b;
   if max<c then begin max:=c; ind:=i-max+1; end;
end;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 19.06.2011 в 23:07.
Alex11223 вне форума Ответить с цитированием
Старый 19.06.2011, 23:25   #3
amm11
 
Регистрация: 08.03.2010
Сообщений: 3
По умолчанию

Спасибо!! :-)

Последний раз редактировалось amm11; 19.06.2011 в 23:30.
amm11 вне форума Ответить с цитированием
Старый 20.06.2011, 00:02   #4
amm11
 
Регистрация: 08.03.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Я бы как-то так делал:
Код:
read(n);
max:=1; lastchar:=1; ind:=1;
for i:=1 to n do
begin
   write('Enter element ', i, ': ');
   readln(b);
   if b=lastchar then c:=c+1 else c:=1;
   lastchar:=b;
   if max<c then begin max:=c; ind:=i-max+1; end;
end;
все о'кей только наверно, все-таки, надо сначала ввести первое число, а затем переменной lastchar присвоить его значение, иначе при первой 1 счетчик =0 и i:=2

Последний раз редактировалось amm11; 20.06.2011 в 00:11.
amm11 вне форума Ответить с цитированием
Старый 20.06.2011, 00:11   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

ой, lastchar:=1 я вроде случайно написал. Хотя наверно это не связано с ошибкой.
что-то не смог повторить, у меня всё работает.
Цитата:
10
Enter element 1: 1
Enter element 2: 1
Enter element 3: 1
Enter element 4: 0
Enter element 5: 1
Enter element 6: 0
Enter element 7: 1
Enter element 8: 0
Enter element 9: 1
Enter element 10: 0
max=3 ind=1
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 20.06.2011 в 00:14.
Alex11223 вне форума Ответить с цитированием
Старый 20.06.2011, 10:27   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
что-то не смог повторить, у меня всё работает.
угу. подтверждаю. проверил. всё работает.
Отличное решение, мне понравилось


p.s. значение lastchar при первом проходе вообще неважно!
Можете, например, иницилизировать его нулём, или тысячей.
или даже так:
Код:
lastchar:=-1;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача из раздела Комбинаторные алгоритмы и алгоритмы на гра-фах в Паскале Klik_1602 Помощь студентам 1 04.01.2011 01:18
Алгоритмы CodeNOT Общие вопросы C/C++ 3 11.12.2010 19:20
алгоритмы boomeer Общие вопросы C/C++ 6 04.12.2010 20:05
Алгоритмы Levhik Общие вопросы Delphi 7 14.01.2009 17:38