Number of ways to select exactly K even numbers from given Array
Given an array arr[] of n integers and an integer K, the task is to find the number of ways to select exactly K even numbers from the given array.
Examples:
Input: arr[] = {1, 2, 3, 4} k = 1
Output: 2
Explanation:
The number of ways in which we can select one even number is 2.Input: arr[] = {61, 65, 99, 26, 57, 68, 23, 2, 32, 30} k = 2
Output:10
Explanation:
The number of ways in which we can select 2 even number is 10.
Approach: The idea is to apply the rule of combinatorics. For choosing r objects from the given n objects, the total number of ways of choosing is given by nCr. Below are the steps:
- Count the total number of even elements from the given array(say cnt).
- Check if the value of K is greater than cnt then the number of ways will be equal to 0.
- Otherwise, the answer will be nCk.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; long long f[12]; // Function for calculating factorial void fact() { // Factorial of n defined as: // n! = n * (n - 1) * ... * 1 f[0] = f[1] = 1; for ( int i = 2; i <= 10; i++) f[i] = i * 1LL * f[i - 1]; } // Function to find the number of ways to // select exactly K even numbers // from the given array void solve( int arr[], int n, int k) { fact(); // Count even numbers int even = 0; for ( int i = 0; i < n; i++) { // Check if the current // number is even if (arr[i] % 2 == 0) even++; } // Check if the even numbers to be // chosen is greater than n. Then, // there is no way to pick it. if (k > even) cout << 0 << endl; else { // The number of ways will be nCk cout << f[even] / (f[k] * f[even - k]); } } // Driver Code int main() { // Given array arr[] int arr[] = { 1, 2, 3, 4 }; int n = sizeof arr / sizeof arr[0]; // Given count of even elements int k = 1; // Function Call solve(arr, n, k); return 0; } |
Java
// Java program for the above approach class GFG{ static int []f = new int [ 12 ]; // Function for calculating factorial static void fact() { // Factorial of n defined as: // n! = n * (n - 1) * ... * 1 f[ 0 ] = f[ 1 ] = 1 ; for ( int i = 2 ; i <= 10 ; i++) f[i] = i * 1 * f[i - 1 ]; } // Function to find the number of ways to // select exactly K even numbers // from the given array static void solve( int arr[], int n, int k) { fact(); // Count even numbers int even = 0 ; for ( int i = 0 ; i < n; i++) { // Check if the current // number is even if (arr[i] % 2 == 0 ) even++; } // Check if the even numbers to be // chosen is greater than n. Then, // there is no way to pick it. if (k > even) System.out.print( 0 + "\n" ); else { // The number of ways will be nCk System.out.print(f[even] / (f[k] * f[even - k])); } } // Driver Code public static void main(String[] args) { // Given array arr[] int arr[] = { 1 , 2 , 3 , 4 }; int n = arr.length; // Given count of even elements int k = 1 ; // Function call solve(arr, n, k); } } // This code is contributed by Rajput-Ji |
Python3
# Python3 program for the above approach f = [ 0 ] * 12 # Function for calculating factorial def fact(): # Factorial of n defined as: # n! = n * (n - 1) * ... * 1 f[ 0 ] = f[ 1 ] = 1 for i in range ( 2 , 11 ): f[i] = i * 1 * f[i - 1 ] # Function to find the number of ways to # select exactly K even numbers # from the given array def solve(arr, n, k): fact() # Count even numbers even = 0 for i in range (n): # Check if the current # number is even if (arr[i] % 2 = = 0 ): even + = 1 # Check if the even numbers to be # chosen is greater than n. Then, # there is no way to pick it. if (k > even): print ( 0 ) else : # The number of ways will be nCk print (f[even] / / (f[k] * f[even - k])) # Driver Code # Given array arr[] arr = [ 1 , 2 , 3 , 4 ] n = len (arr) # Given count of even elements k = 1 # Function call solve(arr, n, k) # This code is contributed by code_hunt |
C#
// C# program for the above approach using System; class GFG{ static int []f = new int [12]; // Function for calculating factorial static void fact() { // Factorial of n defined as: // n! = n * (n - 1) * ... * 1 f[0] = f[1] = 1; for ( int i = 2; i <= 10; i++) f[i] = i * 1 * f[i - 1]; } // Function to find the number of ways to // select exactly K even numbers // from the given array static void solve( int []arr, int n, int k) { fact(); // Count even numbers int even = 0; for ( int i = 0; i < n; i++) { // Check if the current // number is even if (arr[i] % 2 == 0) even++; } // Check if the even numbers to be // chosen is greater than n. Then, // there is no way to pick it. if (k > even) Console.Write(0 + "\n" ); else { // The number of ways will be nCk Console.Write(f[even] / (f[k] * f[even - k])); } } // Driver Code public static void Main(String[] args) { // Given array []arr int []arr = { 1, 2, 3, 4 }; int n = arr.Length; // Given count of even elements int k = 1; // Function call solve(arr, n, k); } } // This code is contributed by sapnasingh4991 |
Javascript
<script> // Javascript program for the above approach var f = Array(12).fill(0); // Function for calculating factorial function fact() { // Factorial of n defined as: // n! = n * (n - 1) * ... * 1 f[0] = f[1] = 1; for ( var i = 2; i <= 10; i++) f[i] = i * 1 * f[i - 1]; } // Function to find the number of ways to // select exactly K even numbers // from the given array function solve(arr, n, k) { fact(); // Count even numbers var even = 0; for ( var i = 0; i < n; i++) { // Check if the current // number is even if (arr[i] % 2 == 0) even++; } // Check if the even numbers to be // chosen is greater than n. Then, // there is no way to pick it. if (k > even) document.write( 0 ); else { // The number of ways will be nCk document.write( f[even] / (f[k] * f[even - k])); } } // Driver Code // Given array arr[] var arr = [ 1, 2, 3, 4 ]; var n = arr.length; // Given count of even elements var k = 1; // Function Call solve(arr, n, k); </script> |
Output:
2
Time Complexity: O(N)
Auxiliary Space: O(N)
Please Login to comment...