Напишите программу, которая находит среднее арифметическое всех элементов массива, которые делятся на 3 и заканчиваются на 1.
Ответ нейросети
02 февраля 2026 04:19
Задача: написать программу, которая находит среднее арифметическое всех элементов массива, которые делятся на 3 и заканчиваются на 1.
Пояснение по шагам (для понимания алгоритма)
- Шаг 1. Пройти по каждому элементу массива.
- Шаг 2. Проверить два условия: элемент делится на 3 (остаток от деления на 3 равен 0) и заканчивается на цифру 1 (остаток от деления на 10 равен 1).
- Шаг 3. Если элемент удовлетворяет условиям, добавить его к накопленной сумме и увеличить счетчик подходящих элементов.
- Шаг 4. После обхода массива: если подходящих элементов не было, вернуть сообщение/значение, обозначающее отсутствие результатов. Иначе вычислить среднее как сумма делённых на количество.
- Шаг 5. Сложность: линейная по размеру массива O(n). Потребная память — O(1) помимо массива.
Пример реализации на языке Python (пошагово пояснённо)
Код: def average_divisible_by3_and_ends_with1(arr): total = 0 # сумма подходящих элементов count = 0 # число подходящих элементов
for x in arr: # Условия: делится на 3 и заканчивается на 1 if x % 3 == 0 and x % 10 == 1: total += x count += 1 if count == 0: return None # или можно вернуть сообщение: "Нет подходящих элементов" return total / count
Пример использования
arr = [3, 21, 31, 51, 111, 141, 2, 7]
Подходящие элементы: 21, 51, 111, 141
Их сумма = 324, количество = 4, среднее = 81.0
print(average_divisible_by3_and_ends_with1(arr)) # -> 81.0
Пояснение примера:
- 21 % 3 == 0 и 21 % 10 == 1 → подходит
- 51, 111, 141 тоже подходят
- Остальные элементы не удовлетворяют хотя бы одному из условий
- Среднее = (21 + 51 + 111 + 141) / 4 = 324 / 4 = 81.0
Варианты реализации на других языках (кратко)
Java: public static Double averageDivisible3EndsWith1(int[] arr) { long sum = 0; int count = 0; for (int x : arr) { if (x % 3 == 0 && x % 10 == 1) { sum += x; count++; } } if (count == 0) return null; return (double) sum / count; }
C++:
#include
double averageDivisible3EndsWith1(const std::vector
- JavaScript: function averageDivisible3EndsWith1(arr) { let sum = 0; let count = 0; for (const x of arr) { if (x % 3 === 0 && x % 10 === 1) { sum += x; count++; } } return count === 0 ? null : sum / count; }
Советы по тестированию
- Проверьте случай, когда подходящих элементов нет: например arr = [2, 4, 8].
- Проверьте с отрицательными числами (если они допускаются): условие можно расширить явным образом, чтобы корректно работать с модулем для отрицательных значений.
- Протестируйте с массивами разных длин и с большими числами, чтобы убедиться в корректной арифметике и отсутствии переполнения (в Python это не проблема, в других языках — нужно учитывать тип данных).
Если нужно, могу привести более компактную версию или адаптировать под конкретный язык или формат ввода/вывода.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



