К содержанию

Задание 17 · Обработка числовой последовательности

Практика и итог

Вся тема на одной странице: как решилась задача темы, главное из подтем, порядок решения и частые ошибки.

Одна задача — вся тема

Задача темы — тройки, в которых не более двух четырёхзначных, а сумма не больше наибольшего числа на 25, — прошла через подтемы, и каждая добавляла к программе новую строку. Пролистай версии: точками отмечены строки, которых не было в предыдущей.

  1. Подтема 1, «Файл и условие»: файл — в список чисел. Точками отмечены новые строки.
  2. Подтема 2, «Пары и тройки»: тройки подряд: количество и max.
  3. Подтема 3, «Сколько подходит»: не более двух четырёхзначных.
  4. Подтема 4, «Цифры и знак»: окончание — по модулю.
  5. Подтема 5, «Порог по всему файлу»: порог — до цикла по всему файлу. Ответ задачи темы — 8358 99821; на восьми числах — 4 1707.

Каждую версию проверяли на восьми числах 125, 1300, −1250, −2100, 7, −325, 2025, 3000 — ответ на них 4 1707. Подтема 6 разбирает длинные формулировки, а дополнительный урок — тройки как стороны треугольника.

Карта темы

Каждая подтема дала одну проверку или приём, и любое решение собирается из них. Сверху — путь от файла к ответу, ниже — по блоку на подтему. Заголовок блока ведёт на подтему.

  1. Порогдо цикла, по всему списку
  2. Переборсоседние группы с проверками
  3. Ответколичество и max или min

1Файл и условие

  • [int(x) for x in f]файл → список чисел
  • x % d == 0кратно d; ноль кратен любому

2Соседние пары и тройки

  • range(len(a) - 2)тройки; пары — len(a) − 1
  • sums.append(s)внутри if; ответ — len и max

3Сколько чисел группы подходит

  • k = int(…) + int(…) + int(…)сколько чисел прошло проверку
  • k == 1, k <= 2ровно одно, не более двух

4Цифры и знак числа

  • abs(x) % 100 == 25оканчивается на 25, и −325 тоже
  • 1000 <= abs(x) <= 9999четырёхзначное, в том числе отрицательное

5Порог по всей последовательности

  • [x for x in a if …]отбор исходных чисел, не их модулей
  • порогдо цикла: max, min, среднее по всему списку

6Длинные формулировки

  • что выводитьпоследняя фраза условия, слово за словом

7Тройка как стороны треугольникадополнительный урок

  • треугольниккаждая сторона меньше суммы двух других
Карта темы: путь к ответу сверху и главное из каждой подтемы. Номер блока — номер подтемы.

Как решать

Любое задание 17 решается одним порядком из пяти шагов. Каждому шагу ты уже учился — под ним номера подтем:

Главный шаг — порог: его находят до перебора по всему списку, а не по ходу чтения. Если на коротком списке ответ не сошёлся, проверяют условия группы.

Проверка на коротком списке — заменить чтение файла восемью числами темы и вывести каждую тройку:

def four(x):    return 1000 <= abs(x) <= 9999  a = [125, 1300, -1250, -2100, 7, -325, 2025, 3000]for i in range(len(a) - 2):    x, y, z = a[i], a[i + 1], a[i + 2]    k = int(four(x)) + int(four(y)) + int(four(z))    print(i, x, y, z, k, x + y + z)
0 125 1300 -1250 2 175 1 1300 -1250 -2100 3 -2050 2 -1250 -2100 7 2 -3343 3 -2100 7 -325 1 -2418 4 7 -325 2025 1 1707 5 -325 2025 3000 2 4700

Частые ошибки

Восемь ошибок встречаются чаще других, и каждую ловит один вопрос к себе. Выбери ошибку — увидишь, как её исправить, и вопрос, который её ловит:

граница range
range(len(a)) → range(len(a) - 2). Спроси себя: есть ли у последней тройки третий элемент?подтема 2
«не более двух»
k == 2 → k <= 2. Спроси себя: подходят ли тройки с 0 и 1 таким числом?подтема 3
цифры без модуля
1000 <= x <= 9999 → 1000 <= abs(x) <= 9999. Спроси себя: −1250 — четырёхзначное?подтема 4
окончание без модуля
x % 100 == 25 → abs(x) % 100 == 25. Спроси себя: что даёт -325 % 100?подтема 4
модуль в списке
[abs(x) for x in a if …] → [x for x in a if …]. Спроси себя: в порог попало исходное число?подтема 5
порог по ходу
порог считают в том же цикле, что и тройки → порог — до цикла, по всему списку. Спроси себя: известен ли порог, когда проверяю первую тройку?подтема 5
строгое и нестрогое
«не больше» записано как < → «не больше» — <=. Спроси себя: подходит ли тройка с суммой, равной порогу?подтема 6
что выводить
вывели наибольшую сумму, а спросили наименьшую → выводят ровно то, что просят. Спроси себя: что в последней фразе условия?подтема 6

Итог

Тема пройдена: задача темы решена от чтения файла до ответа 8358 99821. Вот что взять с собой.

  • ПорядокФайл, порог, группы, условия, ответ.
  • ПорогДо цикла, по всему списку, исходными числами.
  • ЗнакЦифры и окончание — по abs(x), остаток — без модуля.
  • ПроверкаВосемь чисел вручную — ответ 4 1707.
  • Задача темыПорог 99825 — 8358 троек, наибольшая сумма 99821.

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1

Почему порог задачи темы нельзя считать в цикле по тройкам?

ОтветСкрыть ответ
Ответ

Порог — наибольшее число на 25 во всём файле. Пока цикл не дошёл до конца, он может ещё вырасти, и ранние тройки проверятся не с тем порогом.

Вопрос 2

Что вернёт -325 % 100 в Python?

ОтветСкрыть ответ
Ответ

75: остаток в Python не отрицателен. Окончание проверяют по abs(-325) % 100 = 25.

Вопрос 3

Сколько четырёхзначных в тройке 1300, −1250, −2100? Подходит ли она под «не более двух»?

ОтветСкрыть ответ
Ответ

Три — не подходит.

Вопрос 4

Сколько соседних троек в списке из 8 чисел?

ОтветСкрыть ответ
Ответ

6: тройки начинаются с индексов 0–5, range(len(a) − 2).

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Ровно одно кратно 3, сумма кратна 5

В файле 17-4.txt содержится последовательность натуральных чисел, не превышающих 100 000. Определите количество пар, в которых ровно одно число делится на 3, а сумма элементов пары кратна 5. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар.

17-4.txtПоследовательность натуральных чисел, не превышающих 100 000Текстовый файл · 4,7 КБ

Введите через пробел количество пар, затем максимальную сумму.

Не более одного трёхзначного

В файле 17-3.txt содержится последовательность целых чисел от −100 000 до 100 000. Определите количество троек, в которых не более одного числа трёхзначное, а сумма элементов тройки не меньше минимального положительного элемента последовательности, оканчивающегося на 99. В ответе запишите количество найденных троек, затем минимальную из сумм элементов таких троек.

17-3.txtПоследовательность целых чисел от −100 000 до 100 000Текстовый файл · 4,6 КБ

Введите через пробел количество троек, затем минимальную сумму.

Остатки минимума и максимума

Для файла 17-4.txt определите количество пар, для которых выполняются условия: остаток от деления на 3 хотя бы одного числа пары равен остатку от деления на 3 минимального элемента последовательности; остаток от деления на 7 хотя бы одного числа пары равен остатку от деления на 7 максимального элемента последовательности. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар.

17-4.txtПоследовательность натуральных чисел, не превышающих 100 000Текстовый файл · 4,7 КБ

Введите через пробел количество пар, затем максимальную сумму.

Все одного знака

Для файла 17-3.txt определите количество троек, в которых все числа одного знака, а модуль суммы элементов тройки меньше максимального элемента последовательности, запись которого оканчивается на 77. В ответе запишите количество найденных троек, затем абсолютное значение максимальной из сумм элементов таких троек.

17-3.txtПоследовательность целых чисел от −100 000 до 100 000Текстовый файл · 4,6 КБ

Введите через пробел количество троек, затем модуль максимальной суммы.

Четвёрки и утроенное среднее

Для файла 17-4.txt определите количество четвёрок, в которых чисел, кратных 3, больше, чем чисел, кратных 7, а сумма элементов четвёрки больше утроенного среднего арифметического всех чётных элементов последовательности. В ответе запишите количество найденных четвёрок, затем максимальную из сумм элементов таких четвёрок.

17-4.txtПоследовательность натуральных чисел, не превышающих 100 000Текстовый файл · 4,7 КБ

Введите через пробел количество четвёрок, затем максимальную сумму.