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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2008, 23:12   #1
Hranitel
 
Аватар для Hranitel
 
Регистрация: 06.10.2008
Сообщений: 6
Восклицание Помогите решить задачу

Огромная просьба кто может решить такую задачу на Паскале. Заранее благодарен. В массиве A(n) найти наиболее длинную цепочку стоящих подряд попарно различных элементов.

Последний раз редактировалось Hranitel; 07.10.2008 в 23:07.
Hranitel вне форума Ответить с цитированием
Старый 07.10.2008, 01:42   #2
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
 count=10;

var
 mas:array[1..count] of integer;
 i,k,j,b,p:integer;
begin
  randomize;
  k:=1;
  b:=1;
  for i:=1 to count do
  begin
    mas[i]:=random(5
    );
    write(mas[i]);
    write(' ');
  end;
  readln;
  for i:=2 to count do
  begin
   if mas[i-1]=mas[i] then
                      begin
                        inc(k);
                        p:=mas[i];
                      end
                      else
                      begin
                        if k>b then begin b:=k; p:=mas[i-1]; end;
                        if k<b then b:=b+1-1;

                        k:=1;
                      end;
  end;
  for j:=1 to b do
  begin
   mas[j]:=p;
   write(p);
   write(' ');
  end;
  readln;
end.
В принципе работает, но иногда подглючивает...
Помогите найти ошибку, аж самому интересно стало
Arkuz вне форума Ответить с цитированием
Старый 07.10.2008, 23:18   #3
Hranitel
 
Аватар для Hranitel
 
Регистрация: 06.10.2008
Сообщений: 6
По умолчанию

Спасибо (конечно, есть непонятные моменты в коде у тебя). Но всё же задание немного другое: Найти максимально длинную цепочку попарно РАЗЛИЧНЫХ элементов. Интересно кто понимает подскажите как это сделать или фрагмент кода...
Hranitel вне форума Ответить с цитированием
Старый 07.10.2008, 23:28   #4
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Т.е я так понимаю найти типа так из цепочки 3 4 5 5 3 3 5 7 8
дожен найти 55 и 33. Так чтоли?
Arkuz вне форума Ответить с цитированием
Старый 07.10.2008, 23:32   #5
Hranitel
 
Аватар для Hranitel
 
Регистрация: 06.10.2008
Сообщений: 6
По умолчанию

Из твоего примера цепочки 578
Hranitel вне форума Ответить с цитированием
Старый 07.10.2008, 23:40   #6
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

а почему не 3 4 5? тоже различные, подряд...
Роман Радер вне форума Ответить с цитированием
Старый 07.10.2008, 23:43   #7
Hranitel
 
Аватар для Hranitel
 
Регистрация: 06.10.2008
Сообщений: 6
По умолчанию

Дело в том ,что если рассматривать такой подход,то всё равно в этом примере хвост цепочки длинее 3 5 7 8
Hranitel вне форума Ответить с цитированием
Старый 08.10.2008, 00:38   #8
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

аха, въехал))
Роман Радер вне форума Ответить с цитированием
Старый 09.10.2008, 13:32   #9
Hranitel
 
Аватар для Hranitel
 
Регистрация: 06.10.2008
Сообщений: 6
По умолчанию

Ну что никаких мыслей ниукого нет?
Hranitel вне форума Ответить с цитированием
Старый 09.10.2008, 15:41   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Hranitel
И в чём сложность?
да что тут мыслить? я не вижу сложностей то...
обычный однопроходный алгоритм, считаем сколько подряд различных элементов. Как только одинаковые встретились - проверяем - в этот раз последовательность больше предыдущего раза или нет.. если больше - сохраняем её...
вот, тестируйте:
Код:
const N = 15;
var
   a : array[1..N] of integer;
   i, iFirst, MaxLength, curLength : integer;
begin
  Randomize;
  for i:=1 to N do begin
    A[i] := Random(5)+1; {числа от 1 до 5}
    Write(A[i]:3);
  end;
  WriteLn;

  iFirst := 0;
  MaxLength := 0;

  i:=2;
  curLength := 1;
  while i <= N do begin
     if A[i]<>A[i-1] then inc(curLength)
     else begin
       if curLength>MaxLength then begin
         MaxLength := curLength;
         iFirst := i-MaxLength;
         WriteLn('очередной максимум в A[',iFirst:1,'] длина = ',MaxLength:1)
       end;
       curLength := 1;
     end;
     inc(i);
  end;
  if curLength>MaxLength then begin
    MaxLength := curLength;
    iFirst := i-MaxLength;
    WriteLn('очередной максимум в A[',iFirst:1,'] длина = ',MaxLength:1)
  end;

  WriteLn('Максимальная последовательность с A[',iFirst:1,'] длина = ',MaxLength:1)
    
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу, please! CRUMB Помощь студентам 3 08.12.2008 18:02
Помогите решить задачу на C++ TheWanderer Общие вопросы C/C++ 9 08.10.2008 21:16
Помогите решить задачу! Anuta Помощь студентам 2 26.06.2008 05:10
Помогите решить задачу... Spiker01 Паскаль, Turbo Pascal, PascalABC.NET 27 17.06.2008 18:58
Помогите решить задачу cL1zMa Паскаль, Turbo Pascal, PascalABC.NET 5 15.12.2006 11:04