Find the number of words of X vowels and Y consonants that can be formed from M vowels and N consonants

Given four integers X, Y, M and N. The task is to find the number of ways to form a word by choosing X number of vowels and Y number of consonants from total numbers of M vowels and N consonants.

Examples:

Input : X = 2, Y = 2, M = 3, N = 3
Output : 216
The total number of ways of choosing 2 vowels from a total number of 3 vowels is 3\choose2 i.e 3
The total number of ways of choosing 2 consonants from a total number of 3 consonants is 3\choose2 i.e 3.
The total number of ways of selecting 2 consonants from 3 and 2 vowels from 3 is 3\choose2 * 3\choose2 = 9
The total number of ways of arranging 4 letters among themselves = 4! = 24
Hence, the required number of ways = 24 * 9 = 216



Input : X = 1, Y = 2, M = 2, N = 3
Output : 36

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach :

  • The total number of ways of choosing X vowels from a total number of M vowels is M\choose X
  • The total number of ways of choosing Y consonants from a total number of N consonants is N\choose Y
  • The total number of ways of selecting Y consonants from N and X vowels from M is N\choose Y * M\choose X
  • The total number of ways of arranging (X+Y) letters among themselves = (X+Y)!
  • Hence, the required number of ways = (X+Y)! * N\choose Y * M\choose X

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find the number of words
// of X vowels  and Y consonants can be
// formed from M vowels and N consonants
#include <bits/stdc++.h>
using namespace std;
  
// Function to returns factorial of n
int fact(int n)
{
    int res = 1;
    for (int i = 2; i <= n; i++)
        res = res * i;
    return res;
}
  
// Function to find nCr
int nCr(int n, int r)
{
    return fact(n) / (fact(r) * fact(n - r));
}
  
// Function to find the number of words
// of X vowels  and Y consonants can be
// formed from M vowels and N consonants
int NumberOfWays(int X, int Y, int M, int N)
{
    return fact(X + Y) * nCr(M, X) * nCr(N, Y);
}
  
// Driver code
int main()
{
    int X = 2, Y = 2, M = 3, N = 3;
  
    // Function call
    cout << NumberOfWays(X, Y, M, N);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the number of words 
// of X vowels and Y consonants can be 
// formed from M vowels and N consonants
import java.util.*;
import java.lang.*;
import java.io.*;
  
class GFG
{
      
    // Function to returns factorial of n
    static int fact(int n) 
    
        int res = 1
        for (int i = 2; i <= n; i++) 
            res = res * i; 
        return res; 
    
      
    // Function to find nCr 
    static int nCr(int n, int r) 
    
        return fact(n) / (fact(r) * 
                          fact(n - r)); 
    
      
    // Function to find the number of words 
    // of X vowels and Y consonants can be 
    // formed from M vowels and N consonants 
    static int NumberOfWays(int X, int Y, 
                            int M, int N) 
    
        return fact(X + Y) * nCr(M, X) * 
                             nCr(N, Y); 
    
      
      
    // Driver code
    public static void main (String[] args) 
                  throws java.lang.Exception
    {
        int X = 2, Y = 2, M = 3, N = 3
      
        // Function call 
        System.out.println(NumberOfWays(X, Y, M, N));         
    }
}
  
// This code is contributed by Nidhiva

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 program to find the number of words
# of X vowels and Y consonants can be
# formed from M vowels and N consonants
  
# Function to returns factorial of n
def fact(n):
    res = 1
    for i in range(2, n + 1, 1):
        res = res * i
    return res
  
# Function to find nCr
def nCr(n, r):
    return fact(n) // (fact(r) * fact(n - r))
  
# Function to find the number of words
# of X vowels and Y consonants can be
# formed from M vowels and N consonants
def NumberOfWays(X, Y, M, N):
    return fact(X + Y) * nCr(M, X) * nCr(N, Y)
  
# Driver code
if __name__ == '__main__':
    X = 2
    Y = 2
    M = 3
    N = 3
  
    # Function call
    print(NumberOfWays(X, Y, M, N))
  
# This code is contributed by
# Surendra_Gangwar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the number of words 
// of X vowels and Y consonants can be 
// formed from M vowels and N consonants
using System;
  
class GFG
{
      
    // Function to returns factorial of n
    static int fact(int n) 
    
        int res = 1; 
        for (int i = 2; i <= n; i++) 
            res = res * i; 
        return res; 
    
      
    // Function to find nCr 
    static int nCr(int n, int r) 
    
        return fact(n) / (fact(r) * 
                          fact(n - r)); 
    
      
    // Function to find the number of words 
    // of X vowels and Y consonants can be 
    // formed from M vowels and N consonants 
    static int NumberOfWays(int X, int Y, 
                            int M, int N) 
    
        return fact(X + Y) * nCr(M, X) * 
                             nCr(N, Y); 
    
      
    // Driver code
    public static void Main (String[] args)
    {
        int X = 2, Y = 2, M = 3, N = 3; 
      
        // Function call 
        Console.WriteLine(NumberOfWays(X, Y, M, N));         
    }
}
  
// This code is contributed by 29AjayKumar

chevron_right


Output:

216


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.