Найти в Дзене
programmer's notes (python and more)

Программирование на языке Python. Из ЕГЭ задач. Задача 3

Доброго времени суток, читатели, зрители моего канала programmer's notes, любители программировать. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

А это подборки моих материалов на канале

Ещё один пример ЕГЭ-задачи по программированию

И опять ЕГЭ-задача. Не слишком сложная. Минимум алгоритмического мышления и технологий. Как обычно решение на Python. Это я не много отвлекаюсь от написание статей по библиотекам Python. Иногда это надоедает.

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

Условие задачи

Дан массив, содержащий 2019 положительных целых чисел, не превышающих 15000. Необходимо найти количество чётных элементов массива, не кратных 3, заменить все нечётные элементы, кратные 3, на это количество и вывести изменённый массив. Например, для исходного массива из пяти элементов 20, 89, 27, 92, 48 программа должна вывести числа 20, 89, 2, 92, 48.

Надо сказать, что условие задачи с какими-то странными ограничениями. Ну да, какая разница.

Ну, в условии не сказано, как массив вводится. Будем считать, что на на стандартном входе подаётся строка с числами через пробел.

На самом деле у нас есть четыре действия, в результате которых мы должны получить правильный результат: 1. Считать массив. 2. Посчитать чётные элементы, которые не делятся на 3. 3. Заменить нечетные элементы, которые делятся на 3 на полученное в (2) число. 4. Вывести массив.

Ну вот это и реализовано в программе ниже. Я даже не стал её комментировать. Уж очень всё просто.

Текст программы см. ниже
Текст программы см. ниже
primer78.py

Ну, а для гурманов, конечно, сюрприз

ls = list(map(int, input().split()))
n = len(list(filter(lambda x: x % 2 == 0 and x % 3 != 0, ls)))
ls = list(map(lambda x: x if x % 2 == 0 or x % 3 != 0 else n,  ls))
print(*ls)

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

print(*list(map(lambda x: x if x % 2 == 0 or x % 3 != 0 else len(list(\
filter(lambda x: x % 2 == 0 and x % 3 != 0,\
list(map(int, input().split()))))),  ls)))

Вот как-то так!

Замечание
Надо сказать, что я уже поднимал вопрос на своём канале, о том, что делать, если вы не можете считать в память весь массив данных. Я предлагал считывать порциями. Алгоритм, конечно, при этом усложнялся. Но есть ещё один подход. Использовать файл, этот же или другой для временного хранения данных. Тогда можно обрабатывать данные в несколько проходов не тратя практически ни сколько оперативной памяти. Но это отдельный разговор и совсем иные алгоритмы. Может быть я в своей подборке по алгоритмам решу несколько задачек таким образом.

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Вы не любите программировать? Вы лишены алгоритмического мышления? Вы хотите стать менеджером по продаже? Тогда мой канал не для вас
Вы не любите программировать? Вы лишены алгоритмического мышления? Вы хотите стать менеджером по продаже? Тогда мой канал не для вас