XRUST.ru » Программирование » Анализ массива: среднее арифметическое четных элементов, наибольшие положительные значения и сортировка по возрастанию квадратов
Программирование

Анализ массива: среднее арифметическое четных элементов, наибольшие положительные значения и сортировка по возрастанию квадратов

24 апреля 2023, 20:48 32 949 0 32.5

Задача:


Ко мне обратился студент УГНТУ, для помощи:
1. Вычислить среднеарифметическое значение чётных по значению элементов последней четверти массива
2. Найти два наибольших положительных элемента первой трети
3. Упорядочить четные по номеру элементы второй половины массива по возрастанию квадратов

Решение:


Для выполнения всех трех задач на Python, сначала создадим функции для каждой из них, а затем применим их к определенному массиву.
def average_even_last_quarter(arr):
    last_quarter = arr[int(3 * len(arr) / 4):]
    even_elements = [elem for elem in last_quarter if elem % 2 == 0]
    return sum(even_elements) / len(even_elements) if even_elements else 0

def two_largest_positive_first_third(arr):
    first_third = arr[:int(len(arr) / 3)]
    positive_elements = [elem for elem in first_third if elem > 0]
    return sorted(positive_elements)[-2:] if len(positive_elements) > 1 else []

def sort_even_indices_second_half(arr):
    second_half = arr[int(len(arr) / 2):]
    even_indices = [i for i in range(len(second_half)) if i % 2 == 0]
    even_values = [second_half[i] for i in even_indices]
    sorted_values = sorted(even_values, key=lambda x: x ** 2)
    
    for index, value in zip(even_indices, sorted_values):
        second_half[index] = value
    
    return arr[:int(len(arr) / 2)] + second_half

# Пример массива
arr = [5, 3, 8, -2, 7, 6, 12, -1, 9, 0, 15, 20, 3, 10, 14, 18]

avg_even_last_quarter = average_even_last_quarter(arr)
two_largest_first_third = two_largest_positive_first_third(arr)
sorted_arr = sort_even_indices_second_half(arr)

print("Среднее арифметическое четных элементов последней четверти массива:", avg_even_last_quarter)
print("Два наибольших положительных элемента первой трети массива:", two_largest_first_third)
print("Массив с упорядоченными четными по номеру элементами второй половины по возрастанию квадратов:", sorted_arr)


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

Как бы это выглядело на C++


Сначала создадим функции для каждой из них, а затем применим их к определенному массиву.

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

double average_even_last_quarter(const std::vector<int>& arr) {
    int start_index = 3 * arr.size() / 4;
    std::vector<int> even_elements;
    for (int i = start_index; i < arr.size(); ++i) {
        if (arr[i] % 2 == 0) {
            even_elements.push_back(arr[i]);
        }
    }
    return even_elements.empty() ? 0 : std::accumulate(even_elements.begin(), even_elements.end(), 0.0) / even_elements.size();
}

std::vector<int> two_largest_positive_first_third(const std::vector<int>& arr) {
    int end_index = arr.size() / 3;
    std::vector<int> positive_elements;
    for (int i = 0; i < end_index; ++i) {
        if (arr[i] > 0) {
            positive_elements.push_back(arr[i]);
        }
    }
    if (positive_elements.size() < 2) {
        return {};
    }
    std::partial_sort(positive_elements.begin(), positive_elements.begin() + 2, positive_elements.end(), std::greater<int>());
    return {positive_elements[0], positive_elements[1]};
}

std::vector<int> sort_even_indices_second_half(const std::vector<int>& arr) {
    int start_index = arr.size() / 2;
    std::vector<int> second_half(arr.begin() + start_index, arr.end());
    std::vector<int> even_indices;
    for (int i = 0; i < second_half.size(); ++i) {
        if (i % 2 == 0) {
            even_indices.push_back(i);
        }
    }
    std::sort(even_indices.begin(), even_indices.end(), [&](int i1, int i2) { return second_half[i1] * second_half[i1] < second_half[i2] * second_half[i2]; });
    for (int i = 0; i < even_indices.size(); ++i) {
        second_half[even_indices[i]] = arr[start_index + even_indices[i]];
    }
    return std::vector<int>(arr.begin(), arr.begin() + start_index) + second_half;
}

int main() {
    std::vector<int> arr = {5, 3, 8, -2, 7, 6, 12, -1, 9, 0, 15, 20, 3, 10, 14, 18};

    double avg_even_last_quarter = average_even_last_quarter(arr);
    std::vector<int> two_largest_first_third = two_largest_positive_first_third(arr);
    std::vector<int> sorted_arr = sort_even_indices_second_half(arr);

    std::cout << "Среднее арифметическое четных элементов последней четверти массива: " << avg_even_last_quarter << std::endl;
    std::cout << "Два наибольших положительных элемента первой трети массива: ";
    for (int elem : two_largest_first_third) {
        std::cout << elem << ' ';
    }
    std::cout << std::endl;
    std::cout << "Массив с упорядоченными четными по номеру элементами второй половины по возрастанию квадратов: ";
for (int elem : sorted_arr) {
    std::cout << elem << ' ';
}
std::cout << std::endl;

return 0;
}


Теперь можно скопировать код в свой проект, заменить пример массива на свой собственный массив и выполнить код, чтобы увидеть результаты. Xrust: Анализ массива: среднее арифметическое четных элементов, наибольшие положительные значения и сортировка по возрастанию квадратов

квадратов, арифметическое, массива, положительные, возрастанию, сортировка, по, элементов, значения, наибольшие, ios

Поделится
32.5 0

Комментарии


Шоколад и кола мешают глубокому сну: как сохранить память и концентрацию Xrust
Мы любим договариваться с собой: «ещё кусочек и спать». Но ночь — плохой переговорщик. Шоколад и кола приходят как вежливые гости, а уходят как тихие воры: уносят глубокий сон—тот самый, который сортирует воспоминания, чинит концентрацию и наводит порядок в мозге. Неврологи объясняют просто: сахар подстёгивает дофамин и глюкозу, выбивает ритм «медленных волн», а кофеин из какао и газировок держит кору бодрственной. Итог — меньше фаз N3, больше «разбитого» утра. На Xrust.ru мы называем это «десертным джетлагом»: телу кажется, что ночь короче, чем есть. Как вернуть ночи её силу Заведите «сладкое окно» до 16:00, оставьте какао и колу дню. Ужин — легче и раньше: рыба, овощи, цельные крупы. За 90 минут до сна—тёплый свет, вода, короткая прогулка. Ритуал помогает мозгу предсказать тишину: одно и то же время отхода ко сну, одно и то же «прощание с экранами». И если уж очень тянет на шоколад—пусть это будет утро; сладость удовольствия не должна становиться штрафом для памяти. Сон — это не
10 500 60