Dada una array arr[] de n enteros y un entero K , la tarea es encontrar el número de formas de seleccionar exactamente K números pares de la array dada.
Ejemplos:
Entrada: arr[] = {1, 2, 3, 4} k = 1
Salida: 2
Explicación:
El número de formas en que podemos seleccionar un número par es 2.Entrada: arr[] = {61, 65, 99, 26, 57, 68, 23, 2, 32, 30} k = 2
Salida: 10
Explicación:
El número de formas en que podemos seleccionar 2 números pares es 10.
Planteamiento: La idea es aplicar la regla de la combinatoria. Para elegir r objetos de los n objetos dados , el número total de formas de elegir está dado por n C r . A continuación se muestran los pasos:
- Cuente el número total de elementos pares de la array dada (por ejemplo, cnt ).
- Compruebe si el valor de K es mayor que cnt , entonces el número de formas será igual a 0.
- De lo contrario, la respuesta será n C k .
A continuación se muestra la implementación del enfoque anterior:
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>
2
Complejidad temporal: O(N)
Espacio auxiliar: O(N)