Reduce every element of the array to it's half retaining the sum zero - GeeksforGeeks

02 Sep, 2021
Given an array arr[] of N integers with total element sum equal to zero. The task is to reduce every element to it’s half such that the total sum remain zero. For every odd element X in the array, it could be reduced to either(X + 1) / 2 or (X – 1) / 2.Examples:  
Input: arr[] = {-7, 14, -7} Output: -4 7 -3 -4 + 7 -3 = 0Input: arr[] = {-14, 14} Output: -7 7  
 
Approach: All the even elements could be divided by 2 but for odd elements, they have to be alternatively reduced to (X + 1) / 2 and (X – 1) / 2 in order to retain the original sum (i.e. 0) in the final array.Below is the implementation of the above approach: 
C++
Java
Python3
C#
Javascript
// C++ implementation of the above approach#include<bits/stdc++.h>using namespace std; // Function to reduce every// element to it's half such that// the total sum remain zerovoid half(int arr[], int n){    int i;         // Flag to switch between alternating    // odd numbers in the array    int flag = 0;         // For every element of the array    for (i = 0; i < n; i++)    {                 // If its even then reduce it to half        if (arr[i] % 2 == 0 )            cout << arr[i] / 2 << " ";                     // If its odd        else        {                         // Reduce the odd elements            // alternatively            if (flag == 0)            {                cout << arr[i] / 2 - 1 << " ";                                 // Switch flag                flag = 1;            }            else            {                int q = arr[i] / 2;                cout<<q <<" ";                                 // Switch flag                flag = 0;            }        }    }} // Driver codeint main (){    int arr[] = {-7, 14, -7};    int len = sizeof(arr)/sizeof(arr[0]);    half(arr, len) ;    return 0;} // This code is contributed by Rajput-Ji
// Java implementation of the above approachclass GFG{ // Function to reduce every// element to it's half such that// the total sum remain zerostatic void half(int arr[], int n){    int i;         // Flag to switch between alternating    // odd numbers in the array    int flag = 0;         // For every element of the array    for (i = 0; i < n; i++)    {                 // If its even then reduce it to half        if (arr[i] % 2 == 0 )            System.out.print(arr[i] / 2 + " ");                     // If its odd        else        {                         // Reduce the odd elements            // alternatively            if (flag == 0)            {                System.out.print(arr[i] / 2 - 1 + " ");                                 // Switch flag                flag = 1;            }            else            {                int q = arr[i] / 2;                System.out.print(q + " ");                                 // Switch flag                flag = 0;            }        }    }} // Driver codepublic static void main (String[] args){    int arr[] = {-7, 14, -7};    int len = arr.length;    half(arr, len) ;}} // This code is contributed by AnkitRai01
# Python3 implementation of the approach # Function to reduce every# element to it's half such that# the total sum remain zerodef half(arr, n) :         # Flag to switch between alternating    # odd numbers in the array    flag = 0         # For every element of the array    for i in range(n):                 # If its even then reduce it to half        if arr[i] % 2 == 0 :            print(arr[i]//2, end =" ")                     # If its odd        else :                         # Reduce the odd elements            # alternatively            if flag == 0:                print(arr[i]//2, end =" ")                                 # Switch flag                flag = 1            else :                q = arr[i]//2                q+= 1                print(q, end =" ")                                 # Switch flag                flag = 0 # Driver codearr = [-7, 14, -7]half(arr, len(arr))
// C# implementation of the above approachusing System; class GFG{ // Function to reduce every// element to it's half such that// the total sum remain zerostatic void half(int []arr, int n){    int i;         // Flag to switch between alternating    // odd numbers in the array    int flag = 0;         // For every element of the array    for (i = 0; i < n; i++)    {                 // If its even then reduce it to half        if (arr[i] % 2 == 0 )            Console.Write(arr[i] / 2 + " ");                     // If its odd        else        {                         // Reduce the odd elements            // alternatively            if (flag == 0)            {                Console.Write(arr[i] / 2 - 1 + " ");                                 // Switch flag                flag = 1;            }            else            {                int q = arr[i] / 2;                Console.Write(q + " ");                                 // Switch flag                flag = 0;            }        }    }} // Driver codepublic static void Main (){    int [] arr = {-7, 14, -7};    int len = arr.Length;    half(arr, len) ;}} // This code is contributed by mohit kumar 29
<script>// Javascript implementation of the above approach // Function to reduce every// element to it's half such that// the total sum remain zerofunction half(arr, n){    let i;         // Flag to switch between alternating    // odd numbers in the array    let flag = 0;         // For every element of the array    for (i = 0; i < n; i++)    {                 // If its even then reduce it to half        if (arr[i] % 2 == 0 )            document.write(arr[i] / 2 + " ");                     // If its odd        else        {                         // Reduce the odd elements            // alternatively            if (flag == 0)            {                document.write(Math.ceil(arr[i] / 2) - 1 + " ");                                 // Switch flag                flag = 1;            }            else            {                let q = Math.ceil(arr[i] / 2);                document.write(q + " ");                                 // Switch flag                flag = 0;            }        }    }} // Driver code    let arr = [-7, 14, -7];    let len = arr.length;    half(arr, len) ; // This code is contributed by _saurabh_jaiswal</script>
-4 7 -3
 
ankthon
mohit kumar 29
rehman_00001
Rajput-Ji
_saurabh_jaiswal
akshaysingh98088
Constructive Algorithms
Arrays
Python Programs
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Stack Data Structure (Introduction and Program)
Introduction to Arrays
Multidimensional Arrays in Java
Python program to convert a list to string
Defaultdict in Python
Python | Get dictionary keys as a list
Python | Split string into list of characters
Python | Convert a list to dictionary