Minimum removals to make array sum odd in C++

C++Server Side ProgrammingProgramming

C in Depth: The Complete C Programming Guide for Beginners

45 Lectures 4.5 hours

Practical C++: Learn C++ Basics Step by Step

Most Popular

50 Lectures 4.5 hours

Master C and Embedded C Programming- Learn as you go

66 Lectures 5.5 hours

Problem statement

Given an array arr[] of N integers. We need to write a program to find minimum number of elements needed to be removed from the array, so that sum of remaining element is odd.

Example

If input array is {10, 20, 30, 5, 7} then we need to remove one element i.e. either 5 or 7 to make array sum odd

Algorithm

1. Sum of any number of even numbers is always even
2. Sum of odd numbers of odd numbers is always odd
3. Sum of odd numbers of even times is always even
4. Count the number of odd elements in the array. If the count of odd elements in the array is even, then we need to remove single element from the array but if the count of odd elements in the array is odd then there is no need to remove any element

Example

Live Demo

#include <bits/stdc++.h>
using namespace std;
int getMinRemovals(int *arr, int n) {
int cnt = 0;
for (int i = 0; i < n; ++i) {
if (arr[i] % 2 == 1) {
++cnt;
}
}
return (cnt % 2 == 0) ? 1 : 0;
}
int main() {
int arr[] = {10, 20, 30, 5, 7};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Minimum required removals = " <<
getMinRemovals(arr, n) << endl;
return 0;
}

When you compile and execute above program. It generates following output

Output

Minimum required removals = 1
Updated on 23-Dec-2019 06:42:37