Тип 17 №61363
Файл содержит последовательность натуральных чисел, не превышающих 100 000. Назовём тройкой три идущих подряд элемента последовательности.
Определите количество троек, для которых выполняются следующие условия:
— ровно два числа в тройке четырёхзначные;
— хотя бы одно число в тройке делится на 3;
— сумма элементов тройки больше максимального элемента последовательности, запись которого заканчивается на 19. (Гарантируется, что в последовательности есть хотя бы один элемент, запись которого заканчивается на 19.)
В ответе запишите два числа: сначала количество найденных троек, затем максимальную величину суммы элементов этих троек.
Скачать файл: Задание 17
Комментарии к коду решения:
M = [int(x) for x in open('17.txt')]
- Создание спискаM
, содержащего все целочисленные значения из файла '17.txt'.A = [x for x in M if str(x)[-2:] == '19']
- Создание спискаA
, включающего только те значения из спискаM
, которые оканчиваются на 19.count = 0
- Инициализация счетчикаcount
, для счета подходящих троек.maxi = 0
- Инициализация переменнойmaxi
для хранения максимальной суммы троек.for i in range(0, len(M)-2):
- Итерация по индексамi
от 0 доlen(M)-2
.x, y, z = M[i], M[i+1], M[i+2]
- Присвоение переменнымx
,y
,z
значений из спискаM
по индексамi
,i+1
,i+2
.if sum([len(str(abs(j))) == 4 for j in [x, y, z]]) == 2:
- Проверка, что ровно два из трех чиселx
,y
,z
являются четырехзначными.if sum([abs(j) % 3 == 0 for j in [x, y, z]]) >= 1:
- Проверка, что хотя бы одно из трех чисел делится на 3 без остатка.if sum([x, y, z]) > max(A):
- Проверка, что суммаx
,y
,z
больше максимального значения из спискаA
.count += 1
- Увеличение счетчикаcount
на 1, если все условия выполнены.maxi = max(maxi, x + y + z)
- Обновление значения переменнойmaxi
.print(count, maxi)
- Вывод значений счетчикаcount
и переменнойmaxi
.
M = [int(x) for x in open('17.txt')]
A = [x for x in M if str(x)[-2:] == '19']
count = 0
maxi = 0
for i in range(0, len(M)-2):
x, y, z = M[i], M[i+1], M[i+2]
if sum([len(str(abs(j))) == 4 for j in [x, y, z]]) == 2:
if sum([abs(j) % 3 == 0 for j in [x, y, z]]) >= 1:
if sum([x, y, z]) > max(A):
count += 1
maxi = max(maxi, x + y + z)
print(count, maxi)