🎉 Добавлен материал по 9 заданию
ЕГЭ
Задания
Задание 9
18258

Задание 18258

Откройте файл электронной таблицы, содержащей в каждой строке пять натуральных чисел. Определите наибольший номер строки таблицы, для чисел которой выполнены оба условия:

  • числа в строке расположены в порядке неубывания
  • в строке есть повторяющиеся числа с чётной суммой цифр

В ответе запишите только число. Файл (opens in a new tab)

Решение

z14331.py
f = open('9_18258.csv')
 
k = 0
 
def func(b):
    for i in range(len(b)):
        if sum(map(int, str(b[i]))) % 2 == 0:
            return True
    return False
 
for line in f:
    a = list(map(int, line.split(';')))
    b = [x for x in a if a.count(x) == 2]
    if a.sort() == a and len(b) == 2 and func(b):
        k += 1
 
print(k)

Разбор кода

Давайте разберем код пошагово:

  1. Открытие файла

    f = open('9_18258.csv')
    • Открываем CSV файл с исходными данными для обработки
  2. Инициализация счетчика

    k = 0
    • Создаем переменную k для подсчета строк, удовлетворяющих условиям
  3. Вспомогательная функция

    def func(b):
        for i in range(len(b)):
            if sum(map(int, str(b[i]))) % 2 == 0:
                return True
        return False
    • Функция проверяет, есть ли в списке число с четной суммой цифр
    • Для каждого числа преобразует его в строку, затем каждую цифру в число
    • Суммирует цифры и проверяет четность суммы
    • Возвращает True, если найдено хотя бы одно число с четной суммой цифр
  4. Основной цикл обработки

    for line in f:
        a = list(map(int, line.split(';')))
        b = [x for x in a if a.count(x) == 2]
        if a.sort() == a and len(b) == 2 and func(b):
            k += 1
    • Читаем файл построчно
    • Каждую строку разбиваем по точке с запятой и преобразуем в список чисел
    • Создаем список b, содержащий только те числа, которые встречаются ровно 2 раза
    • Проверяем условия:
      1. Числа расположены в порядке неубывания (a.sort() == a)
      2. Есть ровно два повторяющихся числа (len(b) == 2)
      3. Среди повторяющихся чисел есть число с четной суммой цифр (func(b))
    • Если все условия выполнены, увеличиваем счетчик k
  5. Вывод результата

    print(k)
    • Выводим итоговое количество строк, удовлетворяющих всем условиям

Важные замечания:

  • Код использует списковое включение (list comprehension) для эффективной фильтрации повторяющихся чисел
  • Функция map() применяется дважды: для преобразования строк в числа и для суммирования цифр
  • Проверка на неубывание реализована через сравнение с отсортированным списком
  • Код эффективно обрабатывает большие наборы данных благодаря построчному чтению файла