Форум » Массивы, сортировка, работа с файлами » [C2] Пример №3 » Ответить

[C2] Пример №3

Архипова: Не учитывается случай, когда самая длинная группа подряд идущих совпадающих элементов расположена в конце массива. Например, массив: 1 1 2 2 2 и программа выведет 2, а не 3.

Ответов - 5

Поляков: Архипова пишет: Не учитывается случай, когда самая длинная группа подряд идущих совпадающих элементов расположена в конце массива. Например, массив: 1 1 2 2 2 и программа выведет 2, а не 3. Теперь запустите программу и удивитесь. Я, кстати, это сделать еще раз не поленился. Будут вопросы - пишите. :-)

Архипова: *PRIVAT*

Поляков: Архипова пишет: Ведь в разработанном сотрудниками ФИПИ издании "ЕГЭ 2011. Информатика. Типовые тестовые задания" в варианте для аналогичной задачи С2 предлагается несколько другой алгоритм, не столь изящный, как у Вас. Что вы думаете по этому поводу?- Я думаю, что все зависит от грамотности эксперта. А в случае чего есть возможность подать апелляцию. :-)


Alexander: На мой взгляд немного более эффективной будет следующая программа: const N =30; var a: array[1..N+1] of integer; i, k, kMax: integer; begin for i:=1 to N do read(A[i]); { ввод массива } k := 1; { обрабатываем A[1] } kMax := 1; A[N+1] := A[N]+1; { своего рода барьерный элемент: в последней итерации должна сработать ветвь else } for i:=2 to N+1 do begin { а теперь в цикле A[2]...A[N+1] } if A[i] = A[i-1] then { цепочка продолжается } k := k + 1 else begin { цепочка закончилась } if k > kMax then kMax := k; k:=1 end end; writeln(kMax) end. Здесь каждый раз не проверяется условие if k > kMax ..., а только по необходимости. Однако, массив расширен на один элемент A[N+1], не равный A[N]. Не знаю, как отнесутся к этому расширению эксперты. Чисто формально могут придраться, наверное.

Поляков: Alexander пишет: На мой взгляд немного более эффективной будет следующая программа: Барьерный метод - это классика. Но в С2 нельзя менять размер массива.



полная версия страницы