Untitled

№ 8427 (Уровень: Средний)

Файл содержит последовательность натуральных чисел, не превышающих 20 000. Назовём парой два идущих подряд элемента последовательности. Определите количество пар, для которых выполняются следующие условия:

– ровно одно число в паре четырёхзначное;

– сумма квадратов элементов пары без остатка делится на наименьшее в последовательности трёхзначное число, запись которого заканчивается цифрой 3.

В ответе запишите два числа: сначала количество найденных пар, затем максимальную из сумм квадратов элементов таких пар.

Файлы к заданию: 17.txt

Untitled

Комментарии к первому варианту решения задачи:

  1. M = [int(i) for i in open('17.txt')] - Открываем файл 17.txt, читаем его содержимое, и преобразуем каждую строку в целое число используя генератор списков.
  2. n = min(i for i in M if len(str(i)) == 3 and i % 10 == 3) - Создаём список, чтобы найти минимальное число n из списка M, которое имеет длину 3 (т.е. трехзначное) и оканчивается на 3.
  3. A = [] - Создаем пустой список A, в который будем добавлять суммы квадратов пар чисел, удовлетворяющих определенным условиям задачи.
  4. for i in range(len(M) - 1): - Начинаем цикл, проходящий по индексам списка M, за исключением последнего элемента (при просмотре пар i и i+1 есть вероятность выхода за диапазона).
  5. if (len(str(M[i])) == 4) + (len(str(M[i+1])) == 4) == 1: - В этих двух строках мы проверяем условия для каждой пары элементов списка M.
  6. 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).
  7. A.append(M[i] ** 2 + M[i + 1] ** 2) - Если условие в предыдущей строке выполняется, то добавляем сумму квадратов пары чисел в список A.
  8. 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))