Тема 17. Обработка числовой последовательности

17.02 Обработка троек элементов последовательности

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка числовой последовательности
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 21#63204Максимум баллов за задание: 1

В файле 7.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 0 до 10 000 включительно. Определите количество троек, в которых хотя бы один из трёх элементов кратен 14 и хотя бы один элемент меньше среднего арифметического всех чисел в файле. В ответе запишите два числа через пробел: сначала количество найденных троек, а затем – максимальную сумму элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.

Вложения к задаче
Показать ответ и решение

Решение программой

Напишем программу, которая будет проверять все тройки подряд идущих чисел из файла, подсчитывая те, где хотя бы один элемент кратен 14 и хотя бы один элемент меньше среднего арифметического всех чисел в файле. Для проверки первого условия будем проверять остаток от деления каждого из трёх элементов на 14. Если хотя бы один остаток равен 0, условие выполняется. Для проверки второго условия будем сравнивать каждый элемент тройки со средним арифметическим. Количество таких троек и максимальную сумму элементов таких троек будем сохранять в отдельные переменные, чтобы после завершения перебора вывести их значения.

# считываем все числа из файла в список
a = [int(x) for x in open("7.txt")]

# вычисляем среднее арифметическое всех чисел
avg = sum(a) / len(a)

# переменная для подсчёта количества подходящих троек
k = 0

# переменная для хранения максимальной суммы подходящих троек (берём очень маленькое число для начала)
mx = -100000

# перебираем все тройки подряд идущих элементов
for i in range(len(a) - 2):
    # проверяем, что хотя бы один элемент кратен 14
    if a[i] % 14 == 0 or a[i + 1] % 14 == 0 or a[i + 2] % 14 == 0:
        # проверяем, что хотя бы один элемент меньше среднего арифметического
        if a[i] < avg or a[i + 1] < avg or a[i + 2] < avg:
            k += 1
            # обновляем максимальную сумму, если нашли большее значение
            mx = max(mx, a[i] + a[i + 1] + a[i + 2])

# выводим количество подходящих троек и максимальную сумму их элементов
print(k, mx)

Ответ: 976 23278

Ошибка.
Попробуйте повторить позже

Задача 22#72513Максимум баллов за задание: 1

В файле содержится последовательность целых чисел. Элементы ряда могут принимать целые значения в диапазоне [-10000;10000]. Определите количество троек элементов, в которых только два числа двузначные и сумма элементов тройки больше максимального числа последовательности, оканчивающегося на 10. В ответе запишите два числа через пробел: сначала количество найденных троек, а затем минимальную из сумм таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента.

Вложения к задаче
Показать ответ и решение

Решение программой

Напишем программу, которая будет проверять все тройки соседних чисел из файла, подсчитывая те, где ровно два числа являются двузначными, а сумма всех трёх чисел больше максимального элемента последовательности, оканчивающегося на 10. Для проверки количества двузначных чисел в тройке будем отбирать только те элементы, модуль которых находится в пределах от 10 до 99 включительно. Если таких элементов ровно два, то условие выполняется. Для проверки суммы тройки будем сравнивать её с максимальным элементом, оканчивающимся на 10. Такое число определим заранее, проверяя, что последние две цифры числа равны 10 (по модулю, чтобы учитывать и отрицательные). Если сумма тройки превышает найденный максимум, тройка считается подходящей. Все суммы таких троек будем сохранять в отдельный список, а в конце программа выведет количество подходящих троек и минимальную из найденных сумм.

# открываем файл с числами
f = open("17_4.txt")

# считываем все строки из файла и преобразуем в список целых чисел
a = [int(i) for i in f]

# находим максимальный элемент последовательности, оканчивающийся на 10 (по модулю)
mx10 = max([i for i in a if abs(i) % 100 == 10])

# создаём пустой список для хранения сумм подходящих троек
ans = []

# перебираем все подряд идущие тройки элементов
for i in range(len(a) - 2):
    # сохраняем текущую тройку чисел
    temp = [a[i], a[i+1], a[i+2]]

    # отбираем только двузначные числа (по модулю от 10 до 99)
    check = [i for i in temp if 10 <= abs(i) <= 99]

    # если в тройке ровно два двузначных числа и сумма больше mx10
    if len(check) == 2 and sum(temp) > mx10:
        # добавляем сумму тройки в список подходящих
        ans += [sum(temp)]

# выводим количество подходящих троек и минимальную сумму среди них
print(len(ans), min(ans))

Ответ: 33 8569
Рулетка
Вы можете получить скидку в рулетке!