Related Articles
Number of ways to select exactly K even numbers from given Array
• Last Updated : 14 Sep, 2020

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:
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:

1. Count the total number of even elements from the given array(say cnt).
2. Check if the value of K is greater than cnt then the number of ways will be equal to 0.
3. Otherwise, the answer will be nCk.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;``long` `long` `f;`` ` `// Function for calculating factorial``void` `fact()``{``    ``// Factorial of n defined as:``    ``// n! = n * (n - 1) * ... * 1``    ``f = f = 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``    ``// choosen 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;`` ` `    ``// 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``    ``// choosen 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``    ``# choosen 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``;`` ` `// Function for calculating factorial``static` `void` `fact()``{``     ` `    ``// Factorial of n defined as:``    ``// n! = n * (n - 1) * ... * 1``    ``f = f = 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``    ``// choosen 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`
Output:
```2
```

Time Complexity: O(N)
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up