# 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:
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++ program for the above approach ` `#include ` `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 ` `    ``// 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[0]; ` ` `  `    ``// Given count of even elements ` `    ``int` `k = 1; ` ` `  `    ``// Function Call ` `    ``solve(arr, n, k); ` `    ``return` `0; ` `} `

 `// 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 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# 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 ` `    ``// 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.