📋 Условие

Задание 17 посвящено работе с некоторой последовательностью чисел, записанной в текстовом файле. Нужно найти количество пар или троек соседних элементов, которые подходят под определённое условие.

🔍 Подробное решение

Задание 17 посвящено работе с некоторой последовательностью чисел, записанной в текстовом файле. Требуется посчитать пары или тройки соседних элементов, которые подходят под определённое условие.

Шаблонный код на Python:

```python
# Чтение файла
a = [int(x) for x in open('17-3.txt')]

# Перебор пар
for x, y in zip(a, a[1:]):
if условие(x, y):
...

# Перебор троек
for x, y, z in zip(a, a[1:], a[2:]):
if условие(x, y, z):
...
```

Типовые задачи:

1. Количество пар с произведением > 0 и суммой, кратной 7. Ответ: 359, 115022

2. Количество троек с произведением, кратным 7, и суммой, оканчивающейся на 5. Ответ: 153, 19285

3. Пары, где хотя бы один элемент заканчивается на 7, а сумма делится на 12. Ответ: 71, 17664

4. Пары, где хотя бы один элемент больше среднего арифметического, а сумма делится на 7. Ответ: 202, 6916

5. Пары, где сумма < минимального положительного элемента, кратного 19. Ответ: 4984, 696

📚 Теория

Обработка последовательностей. Поиск пар, троек с условиями.

🐍 Шаблон Python

Python
f = open('17.txt')
a = [int(x) for x in f]

# пары (a[i], a[i+1])
for i in range(len(a) - 1):
    pass
# тройки (a[i], a[i+1], a[i+2])
for i in range(len(a) - 2):
    pass

# число из 5 цифр:
if len(str(abs(a[i]))) == 5
# кратное с отрицательными:
if abs(a[i]) % 18 == 0
# тройки срезом:
tr = a[i:i+3]

🐍 Альтернативный способ

Способ 2
# Пример задачи 20963:
f = open('17_20963.txt')
a = [int(x) for x in f]
mn = m = 10**10
k = 0

for i in range(len(a)):
    if len(str(abs(a[i]))) == 4 and abs(a[i]) % 17 == 0:
        mn = min(mn, a[i])

for i in range(len(a) - 2):
    x1 = len(str(abs(a[i]))) == 4 and abs(a[i]) % 100 == 27
    x2 = len(str(abs(a[i+1]))) == 4 and abs(a[i+1]) % 100 == 27
    x3 = len(str(abs(a[i+2]))) == 4 and abs(a[i+2]) % 100 == 27
    if (x1+x2+x3) > 0 and a[i]**2+a[i+1]**2+a[i+2]**2 <= mn**2:
        k += 1
        m = min(abs(a[i])+abs(a[i+1])+abs(a[i+2]), m)
print(k, m)