Как найти сумму всех четных элементов массива

Given an array of integers containing duplicate elements. The task is to find the sum of all even occurring elements in the given array. That is the sum of all such elements whose frequency is even in the array.

Examples

Input : arr[] = {1, 1, 2, 2, 3, 3, 3}
Output : 6
The even occurring element are 1 and 2 (both occur two times). 
Therefore sum of all 1's in the array = 1+1+2+2 = 6.

Input : arr[] = {10, 20, 30, 40, 40}
Output : 80
Element with even frequency are 40.
Sum = 40.

Approach

  • Traverse the array and use a unordered_map in C++ to store the frequency of elements of the array such that the key of map is the array element and value is its frequency in the array.
  • Then, traverse the map to find the frequency of elements and check if it is even, if it is even, then add this element to sum.

Below is the implementation of the above approach: 

C++

#include <bits/stdc++.h>

using namespace std;

int findSum(int arr[], int N)

{

    unordered_map<int, int> mp;

    for (int i = 0; i < N; i++) {

        mp[arr[i]]++;

    }

    int sum = 0;

    for (auto itr = mp.begin(); itr != mp.end(); itr++) {

        if (itr->second % 2 == 0)

            sum += (itr->first) * (itr->second);

    }

    return sum;

}

int main()

{

    int arr[] = { 10, 20, 20, 40, 40 };

    int N = sizeof(arr) / sizeof(arr[0]);

    cout << findSum(arr, N);

    return 0;

}

Java

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

public class GFG {

    public static int element(int[] arr, int n)

    {

        Map<Integer, Integer> map = new HashMap<Integer, Integer>();

        for (int i = 0; i < n; i++) {

            int count = 0;

            if (map.get(arr[i]) != null) {

                count = map.get(arr[i]);

            }

            map.put(arr[i], count + 1);

        }

        int sum = 0;

        for (Entry<Integer, Integer> entry : map.entrySet()) {

            if (entry.getValue() % 2 == 0) {

                sum += entry.getKey() * entry.getValue();

            }

        }

        return sum;

    }

    public static void main(String[] args)

    {

        int arr[] = { 1, 1, 2, 2, 3, 3, 3 };

        int n = arr.length;

        System.out.println(element(arr, n));

    }

}

Python3

def findSum(arr, N):

    mp = {}

    for i in range(N):

        if arr[i] in mp:

            mp[arr[i]] += 1

        else:

            mp[arr[i]] = 1

    Sum = 0

    for first, second in mp.items():

        if (second % 2 == 0):

            Sum += (first) * (second)

    return Sum

arr = [ 10, 20, 20, 40, 40 ]

N = len(arr)

print(findSum(arr, N))

C#

using System;

using System.Collections.Generic;

class GFG {

    static int element(int[] arr, int n)

    {

        Dictionary<int, int> map = new Dictionary<int, int>(); 

        for (int i = 0; i < n; i++)

        {

            if(!map.ContainsKey(arr[i]))

            {

                map.Add(arr[i], 1);

            }

            else

            {

                map[arr[i]] += 1;

            }

        }

        int sum = 0;

        foreach(KeyValuePair<int, int> entry in map)

        {

            if (entry.Value % 2 == 0)

            {

                sum += entry.Key * entry.Value;

            }

        }

        return sum;

    }

  static void Main() {

        int[] arr = { 10, 20, 20, 40, 40};

        int n = arr.Length;

        Console.WriteLine(element(arr, n));

  }

}

Javascript

<script>

function findSum(arr, N)

{

    let mp = new Map();

    for (let i = 0; i < N; i++) {

        if (mp.has(arr[i])) {

            mp.set(arr[i], mp.get(arr[i]) + 1)

        } else {

            mp.set(arr[i], 1)

        }

    }

    let sum = 0;

    for (let itr of mp) {

        if (itr[1] % 2 == 0)

            sum += (itr[0]) * (itr[1]);

    }

    return sum;

}

let arr = [10, 20, 20, 40, 40];

let N = arr.length

document.write(findSum(arr, N));

</script>

Time Complexity: O(N), where N is the number of elements in the array.
Auxiliary Space: O(N)

Method 2: Using Built-in python functions:

  • Count the frequencies of every element using Counter function
  • Traverse the frequency dictionary and sum all the elements with occurrence even frequency multiplied by its frequency.

Below is the implementation:

C++

#include <iostream>

#include <unordered_map>

using namespace std;

void sumEven(int arr[], int n)

{

    unordered_map<int, int> freq;

    for (int i = 0; i < n; i++) {

        freq[arr[i]]++;

    }

    int sum = 0;

    for (auto it : freq) {

        if (it.second % 2 == 0) {

            sum = sum + it.first * it.second;

        }

    }

    cout << sum << endl;

}

int main()

{

    int arr[] = { 10, 20, 20, 40, 40 };

    int n = sizeof(arr) / sizeof(arr[0]);

    sumEven(arr, n);

    return 0;

}

Python3

from collections import Counter

def sumEven(arr, n):

    freq = Counter(arr)

    sum = 0

    for it in freq:

        if freq[it] % 2 == 0:

            sum = sum + it*freq[it]

    print(sum)

arr = [10, 20, 20, 40, 40]

n = len(arr)

sumEven(arr, n)

C#

using System;

using System.Collections.Generic;

using System.Linq;

class GFG {

    static void Main(string[] args)

    {

        int[] arr = { 10, 20, 20, 40, 40 };

        int n = arr.Length;

        sumEven(arr, n);

    }

    static void sumEven(int[] arr, int n)

    {

        Dictionary<int, int> freq

            = arr.GroupBy(x = > x).ToDictionary(

                g = > g.Key, g = > g.Count());

        int sum = 0;

        foreach(KeyValuePair<int, int> pair in freq)

        {

            if (pair.Value % 2 == 0) {

                sum += pair.Key * pair.Value;

            }

        }

        Console.WriteLine(sum);

    }

}

Javascript

function sumEven(arr)

{

    let freq = {};

    for (let i = 0; i < arr.length; i++) {

        if (freq[arr[i]] === undefined) {

            freq[arr[i]] = 1;

        } else {

            freq[arr[i]]++;

        }

    }

    let sum = 0;

    for (let key in freq) {

        if (freq[key] % 2 == 0) {

            sum = sum + key * freq[key];

        }

    }

    console.log(sum);

}

let arr = [10, 20, 20, 40, 40];

sumEven(arr);

Java

import java.util.*;

public class Main {

    public static void sumEven(int[] arr, int n)

    {

        Map<Integer, Integer> freq = new HashMap<>();

        for (int i = 0; i < n; i++) {

            freq.put(arr[i],

                     freq.getOrDefault(arr[i], 0) + 1);

        }

        int sum = 0;

        for (Map.Entry<Integer, Integer> entry :

             freq.entrySet()) {

            int key = entry.getKey();

            int value = entry.getValue();

            if (value % 2 == 0) {

                sum += key * value;

            }

        }

        System.out.println(sum);

    }

    public static void main(String[] args)

    {

        int[] arr = { 10, 20, 20, 40, 40 };

        int n = arr.length;

        sumEven(arr, n);

    }

}

Time complexity: O(n) where n is size of given list “arr”
Auxiliary space: O(1)

Approach#3:using pointers

Algorithm

1. Sort the input array arr.
2. Initialize two pointers i and j to 0.
3. Initialize a variable sum to 0.
4.While j < len(arr):
a. If arr[j] is equal to arr[i], increment j.
b. Otherwise, if (j – i) % 2 == 0, add arr[i] * (j – i) to sum.
c. Set i to j.
5.If (j – i) % 2 == 0, add arr[i] * (j – i) to sum.
6. Return sum.

Python3

def sum_even_freq(arr):

    arr.sort()

    i = j = 0

    sum = 0

    while j < len(arr):

        if arr[j] == arr[i]:

            j += 1

        else:

            if (j - i) % 2 == 0:

                sum += arr[i] * (j - i)

            i = j

    if (j - i) % 2 == 0:

        sum += arr[i] * (j - i)

    return sum

arr = [ 10, 20, 30, 40, 40 ]

print(sum_even_freq(arr))

Time complexity: O(n log n), where n is the length of the input array arr. The sort() function takes O(n log n) time in the worst case, and the while loop takes O(n) time to iterate through the sorted array. Therefore, the overall time complexity is dominated by the sort() function.
Space complexity: O(1), since we’re using a constant amount of extra space to store the pointers i and j, and the variable sum.

Last Updated :
25 Apr, 2023

Like Article

Save Article

Найти сумму четных элементов массива

 

Задача Найти сумму четных элементов массива.

 
Поскольку в программе должна осуществляться проверка на четность элементов, элементы массива должны быть целыми числами. Количество элементов в условии задачи не указано, поэтому в программе будет введено пользователем. Сами элементы массива также заполняет пользователь.
Проверка на четность каждого элемента в цикле осуществляется путем сравнения остатка от деления на 2 (%2) с нулем. Четное число делится нацело без остатка.
Результатом выполнения программы является вывод на экран суммы четных элементов массива.

Реализация на С++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

#include <iostream>
using namespace std;
int main()
{
  int *mas, n, sum;
  sum = 0;
  system(«chcp 1251»);
  system(«cls»);
  cout << «Введите размер массива: «;
  cin >> n;
  mas = new int[n];
  for (int i = 0; i<n; i++)
  {
    cout << «mas[« << i << «]= «;
    cin >> mas[i];
  }
  for (int i = 0; i<n; i++)
  {
    if (mas[i] % 2 == 0) // проверка на четность
      sum += mas[i];
  }
  cout << «Сумма четных элементов массива равна « << sum;
  cin.get(); cin.get();
  return 0;
}

 
Результат выполнения
Сумма четных элементов массива

Назад: Задачи и их решения

В школе на информатике в 9 классе детям преподают Python! Вообще, это классно и лучше всяких бейсиков, фортранов и паскалей. Главное, чтобы преподаватель мог хорошо объяснить и заинтересовать детей в программировании.

Python - массив случайных чисел Соответственно, родителям приходится разбираться с домашними и самостоятельными работами по программированию:)

Вот очередная такая домашка:

В массиве случайных чисел из отрезка от 1 до 100 найти сумму всех четных элементов массива.

Решение:

import random

mas = []

sum = 0

# Генерируем массив из 18 чисел от 1 до 100:

mas = [random.randint(1,100) for i in range(1,18)]

print(mas)

# Проходим в цикле по массиву и все четные числа суммируем:

for i in mas: 

    if (i%2) == 0:

        sum += i

print(sum)

  Ответ:

[12, 36, 55, 36, 65, 81, 14, 56, 58, 59, 48, 2, 40, 76, 13, 39, 43]                                                                            

378

Вариант с выводом ответа с интерполяцией строк:

import random

mas = []

sum = 0

# Генерируем массив из 18 чисел от 1 до 100:

mas = [random.randint(1,100) for i in range(1,18)]

print(‘Массив: %s’ % mas)

# Проходим в цикле по массиву и все четные числа суммируем:

for i in mas: 

    if (i%2) == 0:

        sum += i

print(‘Сумма четных элементов: %s’ % sum)

 Ответ:

Массив: [45, 18, 9, 89, 66, 47, 100, 46, 37, 39, 13, 93, 49, 55, 78, 37, 33]                                                                   

Сумма четных элементов: 308

 

Комментарии ()

Оставьте свой комментарий

Как суммировать все четные числа в массиве?

Как суммировать все четные числа в этом массиве и вывести через alert?
let arr = [1,2,3,4,5,6,7,8,9,10]


  • Вопрос задан

    более года назад

  • 3233 просмотра

reduce() проходит по элементам массива, прогоняя насквозь переменную «аккумулятор» sum — тут это будет сумма. К ней добавляется очередной элемент, умноженный на 1 или на 0, в зависимости от четности числа. Четность определяется младшим битом: если 1, то нечетное.

alert(arr.reduce((sum, n) => sum + n * !(n & 1), 0))

Пригласить эксперта

let arr = [1,2,3,4,5,6,7,8,9,10] 
        let sum = 0;
        for (let i=0; i < arr.length; i++){
            if (arr[i] % 2 == 0){
                sum += arr[i];
            }
        }
        alert(sum)

Вариация решения Сергея Соколова

let sum = arr.reduce((acc, item) =>  acc += item % 2 ? 0 : item, 0);


  • Показать ещё
    Загружается…

27 мая 2023, в 15:46

8500 руб./за проект

27 мая 2023, в 15:20

5000 руб./за проект

27 мая 2023, в 15:01

4000 руб./за проект

Минуточку внимания

Студворк — интернет-сервис помощи студентам

1
Дан массив целых чисел. Найти сумму всех четных элементов массива, стоящих на четных местах, то есть имеющих четные номера.

2
Дан одномерный массив целых чисел, состоящий из N элементов. Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а потом — все остальные.

3
Дан двумерный массив размерностью N*M (N и M вводятся с клавиатуры). Найти количество всех положительных элементов данного массива. произвести вывод данного массива в виде матрицы.

4
Дан двумерный массив. Выполнить следующее преобразование: в каждой строке сменить знак максимального по модулю элемента на противоположный.

Народ пожалуйста сделайте побыстрее!!! До завтра надо

Понравилась статья? Поделить с друзьями:
  • Как найти равенство двух отношений
  • Как найти силу если известна нагрузка
  • Двигатель сместился с подушек как исправить
  • Имиджбук как составить
  • Как найти диагональ боковой грани параллелипипеда