Number of ways to select exactly K even numbers from given Array - GeeksforGeeks

12 Sep, 2021
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 = 2Output:10Explanation: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.
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++
Java
Python3
C#
Javascript
// C++ program for the above approach#include <bits/stdc++.h>using namespace std;long long f[12]; // Function for calculating factorialvoid 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 arrayvoid 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 Codeint 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 program for the above approachclass GFG{     static int []f = new int[12]; // Function for calculating factorialstatic 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 arraystatic 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 Codepublic 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 program for the above approachf = [0] * 12 # Function for calculating factorialdef 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 arraydef 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 elementsk = 1 # Function callsolve(arr, n, k) # This code is contributed by code_hunt
// C# program for the above approachusing System;class GFG{     static int []f = new int[12]; // Function for calculating factorialstatic 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 arraystatic 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 Codepublic 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
<script> // Javascript program for the above approachvar f = Array(12).fill(0); // Function for calculating factorialfunction 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 arrayfunction 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 elementsvar k = 1; // Function Callsolve(arr, n, k);  </script>
2
Time Complexity: O(N) Auxiliary Space: O(N) 
 
Rajput-Ji
sapnasingh4991
code_hunt
noob2000
sooda367
combionatrics
Permutation and Combination
school-programming
Arrays
Combinatorial
Dynamic Programming
Mathematical
Arrays
Dynamic Programming
Mathematical
Combinatorial
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Chocolate Distribution Problem
Count pairs with given sum
Window Sliding Technique
Reversal algorithm for array rotation
Next Greater Element
Write a program to print all permutations of a given string
Permutation and Combination in Python
Factorial of a large number
itertools.combinations() module in Python to print all possible combinations