Как найти сумму половины массива

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given an array arr of size N. The task is to find the sum of the first half (N/2) elements and the second half elements (N – N/2) of an array.

    Examples:

    Input : arr[] = {20, 30, 60, 10, 25, 15, 40} 
    Output : 110, 90 
    Sum of first N/2 elements 20 + 30 + 60 is 110
    Input : arr[] = {50, 35, 20, 15} 
    Output : 85, 35

    Approach:

    1. Initialize SumFirst and SumSecond as 0. 
    2. Traverse the given array. 
    3. Now add elements in SumFirst if the current index is less than N/2 otherwise add in SumSecond.

    Below is the implementation of the above approach: 

    C

    #include <stdio.h>

    void sum_of_elements(int arr[], int n)

    {

        int sum_of_first = 0, sum_of_second = 0;

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

            if (i < n / 2) {

                sum_of_first += arr[i];

            }

            else {

                sum_of_second += arr[i];

            }

        }

        printf("Sum of first half elements is %dn",

               sum_of_first);

        printf("Sum of second half elements is %dn",

               sum_of_second);

    }

    int main()

    {

        int arr[] = { 20, 30, 60, 10, 25, 15, 40 };

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

        sum_of_elements(arr, n);

        return 0;

    }

    C#

    using System;

    class GFG {

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

        {

            int sumfirst = 0, sumsecond = 0;

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

                if (i < n / 2) {

                    sumfirst += arr[i];

                }

                else {

                    sumsecond += arr[i];

                }

            }

            Console.WriteLine("Sum of first half elements is "

                              + sumfirst);

            Console.WriteLine("Sum of second half elements is "

                              + sumsecond);

        }

        static public void Main()

        {

            int[] arr = { 20, 30, 60, 10, 25, 15, 40 };

            int n = arr.Length;

            sum_of_elements(arr, n);

        }

    }

    C++

    #include <bits/stdc++.h>

    using namespace std;

    void sum_of_elements(int arr[], int n) {

        int sumfirst = 0, sumsecond = 0;

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

            if (i < n / 2)

                sumfirst += arr[i];

            else

                sumsecond += arr[i];

        }

        cout << "Sum of first half elements is " << sumfirst

             << endl;

        cout << "Sum of second half elements is " << sumsecond

             << endl;

    }

    int main()

    {

        int arr[] = { 20, 30, 60, 10, 25, 15, 40 };

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

        sum_of_elements(arr, n);

        return 0;

    }

    Java

    import java.util.*;

    class GFG {

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

        {

            int sumfirst = 0, sumsecond = 0;

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

                if (i < n / 2) {

                    sumfirst += arr[i];

                }

                else {

                    sumsecond += arr[i];

                }

            }

            System.out.println("Sum of first half elements is "

                               + sumfirst);

            System.out.println("Sum of second half elements is "

                               + sumsecond);

        }

        public static void main(String[] args)

        {

            int[] arr = { 20, 30, 60, 10, 25, 15, 40 };

            int n = arr.length;

            sum_of_elements(arr, n);

        }

    }

    Python3

    def sum_of_elements(arr, n):

        sumfirst = 0

        sumsecond = 0

        for i in range(n):

            if (i < n // 2):

                sumfirst += arr[i]

            else:

                sumsecond += arr[i]

        print("Sum of first half elements is",

              sumfirst, end="n")

        print("Sum of second half elements is",

              sumsecond, end="n")

    arr = [20, 30, 60, 10, 25, 15, 40]

    n = len(arr)

    sum_of_elements(arr, n)

    Javascript

    <script>

        function sum_of_elements(arr , n)

        {

            var sumfirst = 0, sumsecond = 0;

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

                if (i < parseInt(n / 2))

                {

                    sumfirst += arr[i];

                }

                else {

                    sumsecond += arr[i];

                }

            }

            document.write(

         "Sum of first half elements is " + sumfirst+"<br/>"

            );

            document.write(

        "Sum of second half elements is " + sumsecond+"<br/>"

            );

        }

            var arr = [ 20, 30, 60, 10, 25, 15, 40 ];

            var n = arr.length;

            sum_of_elements(arr, n);

    </script>

    Output:

    Sum of first half elements is 110
    Sum of second half elements is 90

    Time complexity: O(N), as we are using a loop to traverse the array.
    Auxiliary Space: O(1), as we are not using any extra space.

    Approach 2: Traversing half of the array length.

    The idea is to traverse half the length of the array and calculate the first sum and second sum simultaneously by 

    1. Initializing firstSum=0 and LastSum=0 and also traversing the array starting from the 0th index to N/2. 
    2. Adding values of arr[i] to the firstSum.
    3. Adding values of arr[i+n/2] to the secondSum.
    4. An edge case occurs when the length of the array is odd. In this case, the first sum has the sum of the first N/2 elements while secondSum has the sum of the remaining elements excluding the last element (since the loop runs for n/2 times the last element is excluded) Hence we take care of this exclusively.

    Below is the code for the same.

    C#

    using System;

    public class GFG {

        public static void Main()

        {

            int[] arr = { 20, 30, 60, 10, 25, 15, 40 };

            int n = arr.Length;

            sum(arr, n);

        }

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

        {

            int firstSum = 0, secondSum = 0;

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

                firstSum += arr[i];

                secondSum += arr[i + n / 2];

            }

            if (n % 2 != 0)

                secondSum += arr[n - 1];

            Console.WriteLine("Sum of first half elements is "

                              + firstSum);

            Console.WriteLine("Sum of second half elements is "

                              + secondSum);

        }

    }

    C++

    #include <bits/stdc++.h>

    using namespace std;

    void sum(int arr[], int n)

    {

        int firstSum = 0, secondSum = 0;

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

            firstSum += arr[i];

            secondSum += arr[i + n / 2];

        }

        if (n % 2 != 0)

            secondSum += arr[n - 1];

        cout << "Sum of first half elements is " << firstSum

             << endl;

        cout << "Sum of second half elements is " << secondSum

             << endl;

    }

    int main()

    {

        int arr[] = { 20, 30, 60, 10, 25, 15, 40 };

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

        sum(arr, n);

        return 0;

    }

    Java

    import java.util.*;

    public class Main {

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

        {

            int firstSum = 0, secondSum = 0;

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

                firstSum += arr[i];

                secondSum += arr[i + n / 2];

            }

            if (n % 2 != 0)

                secondSum += arr[n - 1];

            System.out.println("Sum of first half elements is "

                               + firstSum);

            System.out.println("Sum of second half elements is "

                               + secondSum);

        }

        public static void main(String[] args)

        {

            int arr[] = { 20, 30, 60, 10, 25, 15, 40 };

            int n = arr.length;

            sum(arr, n);

        }

    }

    Python

    def sum(arr, n):

        first_sum, second_sum = 0, 0

        for i in range(n // 2):

            first_sum += arr[i]

            second_sum += arr[i + n // 2]

        if n % 2 != 0:

            second_sum += arr[n - 1]

        print('Sum of first half elements is', first_sum)

        print("Sum of second half elements is", second_sum)

    arr = [20, 30, 60, 10, 25, 15, 40]

    n = len(arr)

    sum(arr, n)

    Javascript

    function sum(arr, n) {

        let firstSum = 0, secondSum = 0;

        for (let i = 0; i < Math.floor(n / 2); i++) {

            firstSum += arr[i];

            secondSum += arr[i + Math.floor(n / 2)];

        }

        if (n % 2 !== 0)

            secondSum += arr[n - 1];

        console.log(`Sum of first half elements is ${firstSum}`);

        console.log(`Sum of second half elements is ${secondSum}`);

    }

    const arr = [20, 30, 60, 10, 25, 15, 40];

    const n = arr.length;

    sum(arr, n);

    Output:

    Sum of first half elements is 110
    Sum of second half elements is 90

    Time complexity: O(N/2)
    Auxiliary Space: O(1)

    Last Updated :
    27 Mar, 2023

    Like Article

    Save Article

    0 / 0 / 0

    Регистрация: 19.11.2014

    Сообщений: 42

    1

    Функция определяющая суммы первой и второй половины массива

    26.09.2015, 17:01. Показов 2870. Ответов 3


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

    как разработать функцию , которая определяет суммы первой и второй половины динамического массива и количество положительных элементов в каждой?
    P.S.
    одномерный динамический массив



    0



    Programming

    Эксперт

    94731 / 64177 / 26122

    Регистрация: 12.04.2006

    Сообщений: 116,782

    26.09.2015, 17:01

    Ответы с готовыми решениями:

    Поменять местами элементы первой половины массива с элементами второй половины
    Сформировать массив А из 20 случайных целых чисел в
    диапазоне от минус 30 до 30. Напечатать его….

    Вычислить, на сколько сумма элементов первой половины массива отличается от суммы элементов второй половины массива
    Составить программу, которая заполняет целочисленный массив размерностью 20 случайными числами в…

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

    {«Взвесить», то есть найти суммы первой…

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

    {«Взвесить», то есть найти суммы первой…

    3

    zss

    Модератор

    Эксперт С++

    13104 / 10376 / 6207

    Регистрация: 18.12.2011

    Сообщений: 27,754

    26.09.2015, 17:31

    2

    Результаты надо только вывести, или надо передать в вызывающую функцию?

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    void fcount(int* mas,int n)
    {
       int sum1=0,sum2=0,n1=0,n2=0;
       for(int i=0;i<n/2;i++)
       {
          sum1+=mas[i];
          sum2+=mas(n-1-i);
          if(mas[i]>0)
               n1++;
          if(mas[n-i-1]>0)
               n2++;
       }
       cout<<sum1<<sum2<<n1<<n2;
    }



    0



    _Ivana

    4816 / 2276 / 287

    Регистрация: 01.03.2013

    Сообщений: 5,944

    Записей в блоге: 27

    26.09.2015, 18:06

    3

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    #include <iostream>
    using namespace std;
     
    typedef std::pair<int, int> pii;
     
    pii go(int *b, int *e) {
        if (b==e) return make_pair(*b, *b>0);
        else {int *m = b+(e-b)/2; pii l = go(b,m), r = go(m+1,e);
              return make_pair(l.first+r.first, l.second+r.second);}
    }
    void show(pii p) {cout<<"sum = "<<p.first<<", amount = "<<p.second<<'n';}
     
    int main() {
        int a[] = {1,2,3,4,5,6,7,8,9,0}, *e=a+sizeof(a)/sizeof(a[0])-1;
        int *m = a+(e-a)/2; show(go(a,m)); show(go(m+1,e));
        return 0;
    }



    0



    0 / 0 / 0

    Регистрация: 19.11.2014

    Сообщений: 42

    26.09.2015, 21:33

     [ТС]

    4

    вывести



    0



    В продолжение к моим коментариям

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

    1. Посчитал сумму значений массива и разделил её на два
    2. Отсортировал массив по убыванию значений
    3. Перебираем отсортированный масси

    сумма_массива1 = 0;

    сумма_массива2 = 0;

    если (суммамассива1 <= суммамассива2 || суммамассива2 >= полобщей_суммы){

    добавить значение в массив1
    
    сумма_массива1 += значение;
    

    } вдругомслучае {

    добавить значение в массив2
    
    сумма_массива2 += значение;
    

    }

    Код на PHP (проверить можно его тут — http://writecodeonline.com/php/):

    $arr = array(10,68,30,28,34,74,52,20,176,18,86,14,22,4); // исходный массив
    rsort($arr,SORT_NUMERIC); // сортируем по значениям в обратном порядке
    $halfSum = intval(array_sum($arr) / 2); // высчитываем сумму значений и делим на две примерно равные части
    
    $arr_first = array(); // первый массив
    $arr_second = array(); // второй массив
    $sum1 = 0; // сумма первого массива для сравнения
    $sum2 = 0; // сумма второго массива для сравнения
    // перебираем отсортированный исходный массив
    foreach($arr as $val){
        // сумма первого массива меньше второго 
        // и сумма второго массива больше или равна половине общей суммы
        // то очередное значение добавляется в первый массив
        // в ином случае - во второй массив
        if($sum1 <= $sum2 || $sum2 >= $halfSum){
            $arr_first[] = $val;
            $sum1 += $val;
        } else {
            $arr_second[] = $val;
            $sum2 += $val;
        }
    }
    //выводим суммы обоих массивов
    echo array_sum($arr_first).'<br />'.array_sum($arr_second);
    

    Конечно далеко не уверен, что работает корректно, но несколько раз протестил и вроде бы как все нормально сделало.

    Формулировка задачи:

    Помогите с решением:

    В массиве 24 элемента. Сравнить сумму элементов первой половины массива (С1) и второй половины массива( С2).Если С1>С1, то переменной Р присвоить 1 иначе положить Р=2

    Код к задаче: «Сравнить сумму элементов первой половины массива (С1) и второй половины массива (С2)»

    textual

    for i:=1 to n div 2 do
    c1:=c1+arr[i];
    for i:=(n div 2)+1 to n do
    c2:=c2+arr[i];
    if c1>c2 then
    p:=1 
    else
    p:=2;

    Полезно ли:

    10   голосов , оценка 3.900 из 5

    Понравилась статья? Поделить с друзьями:
  • Как найти прямой угол 90 градусов
  • Как найти порно в снэпчате
  • На мониторе все растянуто как исправить windows 10
  • Как можно найти часть от целого
  • Как найти мои фотографии в облаке