Número de formas de colocar 2*N personas en los dos lados de una mesa con X e Y personas en lados opuestos

Dados tres números enteros N , X e Y . La tarea es encontrar el número de formas de colocar 2*N personas a lo largo de dos lados de una mesa con N número de sillas en cada lado, de modo que X personas estén en un lado e Y personas en el lado opuesto. 
Nota: Tanto X como Y son menores o iguales a N.
Ejemplos: 
 

Entrada: N = 5, X = 4, Y = 2 
Salida: 57600 
Explicación: 
El número total de personas 10. X hombres de un lado e Y del otro lado, luego quedan 10 – 4 – 2 = 4 personas. Podemos elegir 5 – 4 = 1 de ellos en un lado de  4\choose 1   manera y las personas restantes se sentarán automáticamente en el otro lado. En cada lado el arreglo se hace en 5! maneras. El número de formas es  4\choose 1   .5!5!
Entrada: N = 3, X = 1, Y = 2 
Salida: 108 
 

Aproximación: 
El número total de personas 2*N. Llamemos a ambos lados como A y B. X hombres en el lado A e Y en el lado B, luego quedan 2 * N – X – Y personas. Podemos elegir NX de ellos para el lado A en  2*N - X - Y\choose N-X   formas y las personas restantes se sentarán automáticamente en el otro lado B. ¡En cada lado el arreglo se hace en N! maneras. El número de formas de colocar 2*N personas a lo largo de dos lados de una mesa es  2*N - X - Y\choose N-X   .N!N!
A continuación se muestra la implementación del enfoque anterior: 
 

C++

#include <bits/stdc++.h>
using namespace std;
 
// Function to find factorial of a number
int factorial(int n)
{
    if (n <= 1)
        return 1;
    return n * factorial(n - 1);
}
 
// Function to find nCr
int nCr(int n, int r)
{
    return factorial(n) / (factorial(n - r) * factorial(r));
}
 
 
// Function to find the number of ways to arrange 2*N persons
int NumberOfWays(int n, int x, int y)
{
    return nCr(2*n-x-y, n-x) * factorial(n) * factorial(n);
}
 
 
// Driver code
int main()
{
    int n = 5, x = 4, y = 2;
     
    // Function call
    cout << NumberOfWays(n, x, y);
     
    return 0;
}

Java

// Java implementation for the above approach
import java.util.*;
import java.lang.*;
import java.io.*;
 
class GFG
{
     
    // Function to returns factorial of n
    static int factorial(int n)
    {
        if (n <= 1)
            return 1;
        return n * factorial(n - 1);
    }
     
    // Function to find nCr
    static int nCr(int n, int r)
    {
        return factorial(n) / (factorial(n - r) *
                               factorial(r));
    }
     
    // Function to find the number of ways
    // to arrange 2*N persons
    static int NumberOfWays(int n, int x, int y)
    {
        return nCr(2 * n - x - y, n - x) *
               factorial(n) * factorial(n);
    }
     
    // Driver code
    public static void main (String[] args)
                  throws java.lang.Exception
    {
        int n = 5, x = 4, y = 2;
         
        // Function call
        System.out.println(NumberOfWays(n, x, y));        
    }
}
 
// This code is contributed by Nidhiva

Python3

# Python3 implementation for the above approach
 
# Function to find factorial of a number
def factorial(n):
 
    if (n <= 1):
        return 1;
    return n * factorial(n - 1);
 
# Function to find nCr
def nCr(n, r):
 
    return (factorial(n) /
           (factorial(n - r) * factorial(r)));
 
# Function to find the number of ways
# to arrange 2*N persons
def NumberOfWays(n, x, y):
 
    return (nCr(2 * n - x - y, n - x) *
            factorial(n) * factorial(n));
 
# Driver code
n, x, y = 5, 4, 2;
 
# Function call
print(int(NumberOfWays(n, x, y)));
 
# This code is contributed by PrinciRaj1992

C#

// C# implementation for the above approach
using System;
     
class GFG
{
     
    // Function to returns factorial of n
    static int factorial(int n)
    {
        if (n <= 1)
            return 1;
        return n * factorial(n - 1);
    }
     
    // Function to find nCr
    static int nCr(int n, int r)
    {
        return factorial(n) / (factorial(n - r) *
                               factorial(r));
    }
     
    // Function to find the number of ways
    // to arrange 2*N persons
    static int NumberOfWays(int n, int x, int y)
    {
        return nCr(2 * n - x - y, n - x) *
            factorial(n) * factorial(n);
    }
     
    // Driver code
    public static void Main(String[] args)
    {
        int n = 5, x = 4, y = 2;
         
        // Function call
        Console.WriteLine(NumberOfWays(n, x, y));        
    }
}
 
// This code is contributed by Princi Singh

PHP

<?php
// PHP implementation for the above approach
 
// Function to find factorial of a number
function factorial($n)
{
    if ($n <= 1)
        return 1;
    return $n * factorial($n - 1);
}
 
// Function to find nCr
function nCr($n, $r)
{
    return factorial($n) / (factorial($n - $r) *
                            factorial($r));
}
 
// Function to find the number of ways
// to arrange 2*N persons
function NumberOfWays($n, $x, $y)
{
    return nCr(2 * $n - $x - $y, $n - $x) *
           factorial($n) * factorial($n);
}
 
// Driver code
$n = 5;
$x = 4;
$y = 2;
 
// Function call
echo (NumberOfWays($n, $x, $y));
 
// This code is contributed by Naman_garg.
?>

Javascript

<script>
 
// JavaScript implementation for the above approach
// Function to returns factorial of n
    function factorial(n) {
        if (n <= 1)
            return 1;
        return n * factorial(n - 1);
    }
 
    // Function to find nCr
    function nCr(n , r) {
        return factorial(n) / (factorial(n - r) * factorial(r));
    }
 
    // Function to find the number of ways
    // to arrange 2*N persons
    function NumberOfWays(n , x , y) {
        return nCr(2 * n - x - y, n - x) * factorial(n) * factorial(n);
    }
 
    // Driver code
     
        var n = 5, x = 4, y = 2;
 
        // Function call
        document.write(NumberOfWays(n, x, y));
 
// This code contributed by Rajput-Ji
 
</script>
Producción: 

57600

 

Publicación traducida automáticamente

Artículo escrito por nidhiva y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *