Подтема 6 из 7
Длинные формулировки
Как разобрать условие, где величина собрана из нескольких действий: квадрат минимума, остаток минимального, два наибольших в тройке.
Порядок действий
Чем «квадрат минимального элемента» отличается от «минимального квадрата элемента»?
Формулировку читают как цепочку действий: «квадрат минимума» — сначала минимум, потом квадрат; «минимум квадратов» — наоборот. Для чисел −20, −3, 8 получаются совсем разные числа:
То же в программе:
a = [-20, -3, 8]print(min(a) ** 2, min([x ** 2 for x in a]))Выбери формулировку, чтобы увидеть выражение:
- квадрат минимального элемента
min(a) ** 2- минимальный квадрат элемента
min([x ** 2 for x in a])- модуль максимальной суммы
abs(max(sums))- максимальный модуль суммы
max([abs(s) for s in sums])- квадрат количества элементов
len(a) ** 2
Если бы в задаче темы было «сумма тройки не больше квадрата максимального элемента, оканчивающегося на 25», порог стал бы max(ends) ** 2, а остальное решение не изменилось бы.
Проверка и ответ
Что выводить, если проверяют одно, а в ответе спрашивают другое?
Группу отбирают по одной величине, а в список кладут ту, что спрашивают в ответе. Пусть в задаче темы просят не наибольшую сумму, а наибольшее произведение чисел подходящей тройки. Проверка остаётся прежней — по сумме, а в список идёт произведение:
def four(x): return 1000 <= abs(x) <= 9999 a = [125, 1300, -1250, -2100, 7, -325, 2025, 3000]results = []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)) if k <= 2 and x + y + z <= 2025: results.append(x * y * z)print(len(results), max(results))Подходят те же четыре тройки, а наибольшее произведение даёт тройка −1250, −2100, 7. Перед тем как писать программу, выпиши три вещи: по какому условию отбирают группы, какую величину кладут в список и что с ней сделать в ответе — максимум, минимум или модуль.
Остаток минимального
Что значит «остаток от деления хотя бы одного элемента на 111 равен минимальному элементу последовательности»?
Остаток элемента сравнивают с самим минимумом: x % 111 == m, где m = min(a) найден до цикла. Похожие слова дают другие проверки:
| Формулировка | Проверка |
|---|---|
| остаток x равен минимальному элементу | x % d == m |
| остаток x равен остатку минимального элемента | x % d == m % d |
«Остаток минимального» и «минимальный остаток» тоже различаются. Для чисел 8 и 12 минимальный элемент 8 даёт при делении на 5 остаток 3, а остатки чисел — 3 и 2, и наименьший из них 2:
a = [8, 12]print(min(a) % 5, min([x % 5 for x in a]))Наибольшие в тройке
Как найти сумму двух наибольших чисел тройки или её среднее по величине число?
Сумма двух наибольших — сумма тройки без наименьшего: sum(t) - min(t). А чтобы найти среднее по величине число, тройку сортируют: .
t = [4, 10, 7]s = sorted(t)print(sum(t) - min(t), s, s[1])sorted создаёт новый список из трёх чисел. Исходный список a не меняется, и соседи в нём остаются на своих местах.
«Сумма квадратов двух наибольших чисел» — сначала выбрать числа, потом возвести в квадрат. Для −10, 3, 4 это 3² + 4² = 25, а не 100 + 16: −10 — наименьшее число, хотя его квадрат самый большой.
- произведение минимума и максимума тройки
min(t) * max(t)- сумма модулей минимума и максимума
abs(min(t)) + abs(max(t))для −9 и 5: 9 + 5 = 14- модуль суммы минимума и максимума
abs(min(t) + max(t))для −9 и 5: |−4| = 4
Итого
- Порядок словпорядок действий: «квадрат минимума» —
min(a) ** 2 - Модультолько у того, у чего назван:
abs(max(sums)) - Проверка и ответв список кладут величину из ответа
- Остаток и минимум«равен минимальному» —
x % d == m, «остатку минимального» —x % d == m % d - Два наибольших
sum(t) - min(t) - Порядок в тройке
sorted(t), исходный список не меняется
Проверьте себя
Ответь сначала сам, потом открой ответ.
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
print(len(sums), min(sums)). На восьми числах — 4 −3343.Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Квадрат минимума и минимум квадратов
Для чисел 5, −7, 2 найди квадрат минимального элемента и минимальный квадрат элемента.
Введите через пробел квадрат минимального элемента, затем минимальный квадрат.
Подсказка
Порядок слов — порядок действий: сначала минимум, потом квадрат, и наоборот.
Решение
Минимум −7, его квадрат 49; квадраты чисел 25, 49, 4 — наименьший 4.
a = [5, -7, 2]print(min(a) ** 2, min([x ** 2 for x in a]))Ответ: 49 4
Модуль максимума и максимум модулей
Суммы подходящих групп равны −15, −40, 10. Найди модуль максимальной суммы и максимальный модуль суммы.
Введите через пробел модуль максимальной суммы, затем максимальный модуль суммы.
Подсказка
«Модуль максимальной суммы»: сначала максимум, потом модуль.
Решение
Максимум сумм 10, его модуль 10; модули 15, 40, 10 — наибольший 40.
sums = [-15, -40, 10]print(abs(max(sums)), max([abs(s) for s in sums]))Ответ: 10 40
Квадрат минимума на 1
Последовательность −31, 6, 21, −4, 11. Найди минимальный элемент, оканчивающийся на 1. Затем найди соседние пары, в которых ровно одно число оканчивается на 1, а сумма квадратов меньше квадрата найденного минимума. Найди количество таких пар и максимальную сумму квадратов.
Введите через пробел количество пар, затем максимальную сумму квадратов.
Подсказка
Минимум на 1 — среди исходных чисел (−31), окончание — по модулю.
Решение
Минимум равен −31, его квадрат 961. Пара (−31, 6) не подходит: 961 + 36 больше 961. Подходят (6, 21), (21, −4) и (−4, 11).
a = [-31, 6, 21, -4, 11]m = min([x for x in a if abs(x) % 10 == 1])squares = []for i in range(len(a) - 1): x, y = a[i], a[i + 1] k = int(abs(x) % 10 == 1) + int(abs(y) % 10 == 1) if k == 1 and x ** 2 + y ** 2 < m ** 2: squares.append(x ** 2 + y ** 2)print(len(squares), max(squares))Ответ: 3 477
Проверяем сумму, выводим квадраты
Последовательность 3, −1, 6, 2. Среди соседних пар с суммой больше 4 найди количество и минимальную сумму квадратов.
Введите через пробел количество пар, затем минимальную сумму квадратов.
Подсказка
Отбор — по сумме пары, а в список кладут суммы квадратов.
Решение
Подходят (−1, 6) с суммой 5 и (6, 2) с суммой 8; их суммы квадратов 37 и 40.
a = [3, -1, 6, 2]squares = []for i in range(len(a) - 1): x, y = a[i], a[i + 1] if x + y > 4: squares.append(x ** 2 + y ** 2)print(len(squares), min(squares))Ответ: 2 37
Ровно одно отрицательное и порог
Для файла 17-3.txt определите количество пар, в которых ровно одно число отрицательное, а сумма пары больше максимального отрицательного трёхзначного элемента последовательности, кратного 7. В ответе запишите количество найденных пар, затем минимальную из сумм квадратов элементов таких пар. Под парой подразумевается два идущих подряд элемента.
Введите через пробел количество пар, затем минимальную сумму квадратов.
Подсказка
Порог — наибольшее отрицательное трёхзначное кратное 7; в ответе — минимум сумм квадратов.
Решение
Проверяется сумма пары, а в список идёт сумма квадратов.
with open("17-3.txt") as f: a = [int(x) for x in f]limit = max([x for x in a if -999 <= x <= -100 and x % 7 == 0])squares = []for i in range(len(a) - 1): x, y = a[i], a[i + 1] if int(x < 0) + int(y < 0) == 1 and x + y > limit: squares.append(x ** 2 + y ** 2)print(len(squares), min(squares))Ответ: 301 10
Остаток минимального и минимальный остаток
Для чисел 13, 22, 9 найди остаток от деления на 5 минимального элемента и минимальный из остатков.
Введите через пробел остаток минимального элемента, затем минимальный остаток.
Подсказка
Остаток минимального — min(a) % 5; минимальный остаток — наименьший из остатков всех чисел.
Решение
Минимальный элемент 9, 9 % 5 = 4; остатки чисел 3, 2, 4 — наименьший 2.
a = [13, 22, 9]print(min(a) % 5, min([x % 5 for x in a]))Ответ: 4 2
Остаток на 7 равен минимуму
Последовательность 30, 4, 17, 9. Найди количество соседних пар, в которых остаток от деления хотя бы одного числа на 7 равен минимальному элементу последовательности, и максимальную сумму таких пар.
Введите через пробел количество пар, затем максимальную сумму.
Подсказка
С минимумом сравнивается остаток каждого числа пары, а не само число.
Решение
Минимум 4; остатки 2, 4, 3, 2 — подходят пары (30, 4) и (4, 17).
a = [30, 4, 17, 9]m = min(a)sums = []for i in range(len(a) - 1): x, y = a[i], a[i + 1] if x % 7 == m or y % 7 == m: sums.append(x + y)print(len(sums), max(sums))Ответ: 2 34
Остаток на 37 равен минимуму
В файле 17-2.txt содержится последовательность натуральных чисел. Определите количество пар, в которых остаток от деления хотя бы одного из элементов на 37 равен минимальному элементу последовательности. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. Под парой подразумевается два идущих подряд элемента.
Введите через пробел количество пар, затем максимальную сумму.
Подсказка
Найди m = min(a) до цикла и сравнивай с ним x % 37 и y % 37.
Решение
Проверка x % 37 == m or y % 37 == m, где m найден заранее.
with open("17-2.txt") as f: a = [int(x) for x in f]m = min(a)sums = []for i in range(len(a) - 1): x, y = a[i], a[i + 1] if x % 37 == m or y % 37 == m: sums.append(x + y)print(len(sums), max(sums))Ответ: 64 106864
Два наибольших в тройке
Для тройки 7, −2, 5 найди сумму двух наибольших чисел, сумму квадратов двух наибольших чисел и средний по величине элемент.
Введите через пробел сумму двух наибольших, сумму их квадратов и средний по величине элемент.
Подсказка
После sorted два наибольших — t[1] и t[2], средний по величине — t[1].
Решение
Два наибольших — 7 и 5: 7 + 5 = 12, 49 + 25 = 74; средний по величине — 5.
t = sorted([7, -2, 5])print(t[1] + t[2], t[1] ** 2 + t[2] ** 2, t[1])Ответ: 12 74 5
Минимум и максимум тройки
Для тройки 3, −8, 4 найди сумму модулей минимума и максимума, модуль их суммы и их произведение.
Введите через пробел сумму модулей, модуль суммы, затем произведение.
Подсказка
Сумма модулей, модуль суммы и произведение — три разных выражения от одних −8 и 4.
Решение
|−8| + |4| = 12, |−8 + 4| = 4, −8 · 4 = −32.
t = [3, -8, 4]lo, hi = min(t), max(t)print(abs(lo) + abs(hi), abs(lo + hi), lo * hi)Ответ: 12 4 -32
Два наибольших против квадрата количества
В файле 17-3.txt содержится последовательность целых чисел от −100 000 до 100 000. Определите количество троек, в которых сумма двух наибольших чисел меньше квадрата количества всех элементов последовательности, модули которых являются четырёхзначными числами и оканчиваются на 13. В ответе запишите количество найденных троек, затем абсолютное значение максимальной из сумм элементов таких троек. Под тройкой подразумевается три идущих подряд элемента.
Введите через пробел количество троек, затем модуль максимальной суммы.
Подсказка
Сумма двух наибольших — sum(t) - min(t); модуль берут только у окончательного максимума.
Решение
Порог — квадрат количества четырёхзначных чисел на 13; модуль — у окончательного максимума.
with open("17-3.txt") as f: a = [int(x) for x in f]ends = [x for x in a if abs(x) % 100 == 13]k = len([x for x in ends if 1000 <= abs(x) <= 9999])sums = []for i in range(len(a) - 2): t = [a[i], a[i + 1], a[i + 2]] if sum(t) - min(t) < k ** 2: sums.append(sum(t))print(len(sums), abs(max(sums)))Ответ: 245 75