Improve Article
Save Article
Like Article
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:
- Initialize SumFirst and SumSecond as 0.
- Traverse the given array.
- 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
- Initializing firstSum=0 and LastSum=0 and also traversing the array starting from the 0th index to N/2.
- Adding values of arr[i] to the firstSum.
- Adding values of arr[i+n/2] to the secondSum.
- 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
как разработать функцию , которая определяет суммы первой и второй половины динамического массива и количество положительных элементов в каждой?
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
26.09.2015, 17:01 |
Ответы с готовыми решениями: Поменять местами элементы первой половины массива с элементами второй половины
«Взвесить», то есть найти суммы первой половины и второй половины данных, и максимально уравновесить их, обменивая элементы {«Взвесить», то есть найти суммы первой… «Взвесить», то есть найти суммы первой половины и второй половины данных, и максимально уравновесить их, обменивая элементы {«Взвесить», то есть найти суммы первой… 3 |
zss Модератор 13104 / 10376 / 6207 Регистрация: 18.12.2011 Сообщений: 27,754 |
||||
26.09.2015, 17:31 |
2 |
|||
Результаты надо только вывести, или надо передать в вызывающую функцию?
0 |
_Ivana 4816 / 2276 / 287 Регистрация: 01.03.2013 Сообщений: 5,944 Записей в блоге: 27 |
||||
26.09.2015, 18:06 |
3 |
|||
0 |
0 / 0 / 0 Регистрация: 19.11.2014 Сообщений: 42 |
|
26.09.2015, 21:33 [ТС] |
4 |
вывести
0 |
В продолжение к моим коментариям
В заголовке темы, вы указываете, что если не абсолютно равны, то максимально приближены к равенству. Тогда, на PHP я сделал следующим образом:
- Посчитал сумму значений массива и разделил её на два
- Отсортировал массив по убыванию значений
- Перебираем отсортированный масси
сумма_массива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