№ 8427 (Уровень: Средний)
Файл содержит последовательность натуральных чисел, не превышающих 20 000. Назовём парой два идущих подряд элемента последовательности. Определите количество пар, для которых выполняются следующие условия:
– ровно одно число в паре четырёхзначное;
– сумма квадратов элементов пары без остатка делится на наименьшее в последовательности трёхзначное число, запись которого заканчивается цифрой 3.
В ответе запишите два числа: сначала количество найденных пар, затем максимальную из сумм квадратов элементов таких пар.
Файлы к заданию: 17.txt
Комментарии к первому варианту решения задачи:
M = [int(i) for i in open('17.txt')]
- Открываем файл 17.txt, читаем его содержимое, и преобразуем каждую строку в целое число используя генератор списков.n = min(i for i in M if len(str(i)) == 3 and i % 10 == 3)
- Создаём список, чтобы найти минимальное число n
из списка M
, которое имеет длину 3 (т.е. трехзначное) и оканчивается на 3.A = []
- Создаем пустой список A
, в который будем добавлять суммы квадратов пар чисел, удовлетворяющих определенным условиям задачи.for i in range(len(M) - 1):
- Начинаем цикл, проходящий по индексам списка M
, за исключением последнего элемента (при просмотре пар i
и i+1
есть вероятность выхода за диапазона).if (len(str(M[i])) == 4) + (len(str(M[i+1])) == 4) == 1:
- В этих двух строках мы проверяем условия для каждой пары элементов списка M
.if (M[i] ** 2 + M[i + 1] ** 2) % n == 0:
- Условие (len(str(M[i])) == 4) + (len(str(M[i+1])) == 4) == 1
гарантирует, что только одно число в паре является четырехзначным. Затем мы проверяем, делится ли сумма квадратов пары чисел на n
без остатка ((M[i] ** 2 + M[i + 1] ** 2) % n == 0
).A.append(M[i] ** 2 + M[i + 1] ** 2)
- Если условие в предыдущей строке выполняется, то добавляем сумму квадратов пары чисел в список A
.print(len(A), max(A
- В конце кода выводим количество элементов в списке A
(количество найденных пар) и максимальное значение из списка A
(максимальную сумму квадратов элементов пар).M = [int(i) for i in open('17.txt')]
n = min(i for i in M if len(str(i)) == 3 and i % 10 == 3)
A = []
for i in range(len(M) - 1):
if (len(str(M[i])) == 4) + (len(str(M[i+1])) == 4) == 1:
if (M[i] ** 2 + M[i + 1] ** 2) % n == 0:
A.append(M[i] ** 2 + M[i + 1] ** 2)
print(len(A), max(A))