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