Dado un número N , que representa el conteo de elementos y es igual a 2K , la tarea es encontrar la cantidad de formas en que estos elementos pueden formar 2 conjuntos que contienen K elementos cada uno.
Ejemplos:
Entrada: N = 4
Salida: 3
Explicación: Los 3 conjuntos que constan de 2 (= N/2) elementos son:
[1, 2], [3, 4]
[1, 3], [2, 4]
[1, 4], [2, 3]Entrada: N = 20
Salida: 12164510040883200
Planteamiento: Se debe observar que el concepto de combinaciones tiene que aplicarse para elegir los elementos para cada conjunto.
Se sabe que el número de formas de elegir r cosas de un total de n cosas está dado por:
nC r = n!/(nr)!*r!
Ahora, la fórmula anterior se puede modificar para resolver el problema dado:
- Aquí, se deben elegir N/2 elementos de N elementos para formar cada conjunto. Por lo tanto, r = N/2 .
- Cabe señalar que el mismo elemento no puede estar presente simultáneamente en los dos conjuntos. Entonces, la fórmula de n C r tiene que dividirse por 2.
- ¡ Además, el elemento presente en cada conjunto puede organizarse en (N/2-1)! maneras. Como hay dos conjuntos, la fórmula se multiplicará dos veces por este factor.
La fórmula modificada obtenida viene dada por:
Número de vías = ((N! / (N – r)!*r!) / 2) * (N / 2 – 1)!*(N / 2 – 1)! donde r = N / 2
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <iostream> using namespace std; // Function to find the factorial // of values long long int fact(long long int N) { // Factorial of 0 is 1 if (N == 0) { return 1; } else { // Recursive function call return N * fact(N - 1); } } // Driver Code int main() { // Given input int N = 20; // Function Call cout << (fact(N) / (fact(N / 2) * fact(N - N / 2))) / 2 * fact(N / 2 - 1) * fact(N / 2 - 1); return 0; }
Java
// Java code for the above approach import java.io.*; class GFG { // Function to find the factorial // of values static long fact(long N) { // Factorial of 0 is 1 if (N == 0) { return 1; } else { // Recursive function call return N * fact(N - 1); } } // Driver Code public static void main(String[] args) { // Given input int N = 20; // Function Call System.out.println( (fact(N) / (fact(N / 2) * fact(N - N / 2))) / 2 * fact(N / 2 - 1) * fact(N / 2 - 1)); } } // This code is contributed by Potta Lokesh
Python3
# python program for the above approach # Function to find the factorial # of values def fact(N): # Factorial of 0 is 1 if (N == 0): return 1 else: # Recursive function call return N * fact(N - 1) # Driver Code if __name__ == "__main__": # Given input N = 20 # Function Call print(int((fact(N) / (fact(N / 2) * fact(N - N / 2))) / 2 * fact(N / 2 - 1) * fact(N / 2 - 1))) # This code is contributed by rakeshsahni
C#
// C# code for the above approach using System; public class GFG { // Function to find the factorial // of values static long fact(long N) { // Factorial of 0 is 1 if (N == 0) { return 1; } else { // Recursive function call return N * fact(N - 1); } } // Driver Code public static void Main(string[] args) { // Given input int N = 20; // Function Call Console.WriteLine( (fact(N) / (fact(N / 2) * fact(N - N / 2))) / 2 * fact(N / 2 - 1) * fact(N / 2 - 1)); } } // This code is contributed AnkThon
Javascript
<script> // Javascript program for the above approach // Function to find the factorial // of values function fact(N) { // Factorial of 0 is 1 if (N == 0) { return 1; } else { // Recursive function call return N * fact(N - 1); } } // Driver Code // Given input let N = 20; // Function Call document.write((fact(N) / (fact(N / 2) * fact(N - N / 2))) / 2 * fact(N / 2 - 1) * fact(N / 2 - 1)); // This code is contributed by Samim Hossain Mondal. </script>
12164510040883200
Complejidad temporal: O(N)
Espacio auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por anusha00466 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA