В чем же "фундаментальная сложность" задачи из категории С4 ЕГЭ по информатике и ИКТ

Я - репетитор по решению задач из категории С4 ЕГЭ по информатике

Апогеем всей экзаменационной работы, безусловно, является задание из категории C4 ЕГЭ по информатике и ИКТ. Я не встречал еще выпускника, который бы смело "смотрел" на данное задание. Для многих решить задачу из категорию С4 - несбыточная мечта.

Действительно, это самое сложное и запутанное упражнение из 32 представленных упражнений на Едином Государственном Экзамене. Оно самое "дорогое" и оценивается в 4 первичных балла или минимум в 10 баллов тестовых, то есть составляет 1/10 всех теоретически возможных набранных баллов.

В чем же "фундаментальная сложность" задачи из категории С4 ЕГЭ по информатике и ИКТ?

Ответ прост: вы должны хорошо уметь программировать и уметь реализовывать . Да, всего лишь уметь программировать и быть алгоритмистом. Очевидно, что превалирующую сложность составляет все-таки программная часть, а не алгоритмическая, хотя бывают и исключения.

Очень многие выпускники, считают, что подготовиться к успешной сдаче ЕГЭ по информатике и ИКТ можно за 1 год или 365 дней условно. Это просто фундаментальнейшая ошибка, так как программирование, особенно до серьезного уровня, изучается не один год.

Я всегда говорю, что нужно потратить ориентировочно 700 астрономических часов, чтобы получить итоговый экзаменационный балл в районе 93-100 тестовых баллов. Но это минимальная затрата времени. Желательно, приведенную цифру увеличить в 2-3 раза, то есть наберется 1 400-2 100 часов серьезной подготовки, а это не один год конститутивного дисциплинированного образования.

Для реализации упражнения нужно знать не самые азы программирования, а глубоко разбираться в языке программирования, являющемся для вас базовым языком. Для начала перечитайте условие задания С4 ЕГЭ по информатике несколько раз. Не вздумайте бросаться что-либо программировать!

Лично мне, как правило, приходится перечитывать условие 5-6 раз для полного его понимания. Как показывает статистика по задачам из категории С4 ЕГЭ по информатике , один из самых сложных моментов заключен в правильном выводе результата. Составители специально дают большую вариативность форматов вывода ответа, чтобы поднять сложность задания.

Поэтому особое внимание обращайте на то, в каком формате и что нужно визуализировать в качестве результата.

Если вы глубоко осознали условия примера, разобрались с форматом входных и выходных данных, то спокойно приступайте к составлению алгоритма. Лично я рекомендую вам чаще прибегать к изображению входных данных в виде таблицы, а не . Наполняйте таблицу необходимой информацией и пытайтесь вывести алгоритм решения поставленной задачи.

После этапа алгоритмизации можно приступать к наброскам составления программы. Начинайте с описания типов данных, разумеется, что вы должны владеть полным арсеналом знаний для использования соответствующих средств языка программирования, который вы выбрали за базовый язык.

Краткие логические выводы

В целом, если вы детерминировали алгоритм и умеете хорошо программировать, то считайте, что задача вами решена на максимально высокий балл. Тем, кто не умеет программировать, но является неплохим алгоритмистом, тоже не стоит отчаиваться, так как за представленный правильный алгоритм производится начисление определенного количества баллов.

Если вы не создали ни алгоритм, ни программу, тоже ничего страшного, ведь решив все другие задачи корректно, вы все равно сможете набрать от 85 тестовых баллов за экзамен.

Примечание : задания из категории С4 ЕГЭ по информатике являются "королевскими", поэтому те, кто справились с данной задачей, могут уверенно утверждать, что они успешно прошли экзамен по информатике и ИКТ.

Для большинства учеников самой сложной и нерешаемой задачей в ЕГЭ по информатике является задача C4.

Поэтому я разберу одну из них, и покажу, как такие задачи можно решать на языке Python.

Условие

По каналу связи передаётся последовательность положительных целых чисел, все числа не превышают 1000. Количество чисел равно N (N>2), но может быть очень велико. Затем передаётся контрольное значение последовательности – наибольшее число R, удовлетворяющее следующим условиям:

  • R – сумма двух различных переданных элементов последовательности («различные» означает, что нельзя просто удваивать переданные числа; суммы различных, но равных по величине допускаются);
  • При делении на 3 число R даёт остаток 1;
  • Если такого числа R нет, то контрольное значение полагается равным 1.

В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены.

Напишите эффективную, в том числе по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет проверять правильность контрольного значения.

Мы не последуем их совету (не будем писать программу на Pascal), а напишем её на Python.

Вы увидите, насколько это легче и быстрее.

Решение

При делении на 3 число R даёт остаток 1. Из этого следует, что R может быть суммой или числа, дающего при делении на 3 остаток 0 с числом, дающим остаток 1 , или двух чисел, дающих остаток 2 .

Поэтому для вычисления R достаточно запоминать не все числа (их может быть много), а только 4: максимальное, делящееся на 3; максимальное, дающее остаток 1; и два наибольших числа, дающих остаток 2.

# Язык программирования - Python 3 R_0 = R_1 = R_2_1 = R_2_2 = - 2000 # Переменные, в которых мы будем хранить числа N = int (input ()) # Не будем проверять входные данные на корректность # В ЕГЭ (но не в реальной жизни!) это не нужно for i in range (N ): num = int (input ()) if num % 3 == 0 : R_0 = max (R_0 , num ) # Перезаписываем число на большее, если возможно elif num % 3 == 1 : R_1 = max (R_1 , num ) elif num % 3 == 2 : # Можно и else, но так более понятно if num > R_2_1 : R_2_1 , R_2_2 = num , R_2_1 # Нужно хранить 2 наибольших числа, причём R_2_1 >= R_2_2 elif num > R_2_2 : R_2_2 = num R = max (R_0 + R_1 , R_2_1 + R_2_2 ) # Это - вычисленное контрольное значение if R < 0 : # Если такого числа нет, R будет отрицательно # Так как все числа не превышают 1000 R = 1 print ("Вычисленное контрольное значение: {} " . format (R )) # Осталось проверить пришедшее число result = int (input ()) if R == result : print ("Контроль пройден" ) else : print ("Контроль не пройден" )

Такое решение набирает максимальный балл.

Понравилась статья? Поделиться с друзьями: