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 isi.e 3
The total number of ways of choosing 2 consonants from a total number of 3 consonants isi.e 3.
The total number of ways of selecting 2 consonants from 3 and 2 vowels from 3 is*
= 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
- The total number of ways of choosing Y consonants from a total number of N consonants is
- The total number of ways of selecting Y consonants from N and X vowels from M is
*
- The total number of ways of arranging (X+Y) letters among themselves = (X+Y)!
- Hence, the required number of ways = (X+Y)! *
*
Below is the implementation of the above approach:
C++
// 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 nint fact(int n){ int res = 1; for (int i = 2; i <= n; i++) res = res * i; return res;}// Function to find nCrint 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 consonantsint NumberOfWays(int X, int Y, int M, int N){ return fact(X + Y) * nCr(M, X) * nCr(N, Y);}// Driver codeint main(){ int X = 2, Y = 2, M = 3, N = 3; // Function call cout << NumberOfWays(X, Y, M, N); return 0;} |
Java
// Java program to find the number of words // of X vowels and Y consonants can be // formed from M vowels and N consonantsimport 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 |
Python3
# 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 ndef fact(n): res = 1 for i in range(2, n + 1, 1): res = res * i return res# Function to find nCrdef 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 consonantsdef NumberOfWays(X, Y, M, N): return fact(X + Y) * nCr(M, X) * nCr(N, Y)# Driver codeif __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 |
C#
// C# program to find the number of words // of X vowels and Y consonants can be // formed from M vowels and N consonantsusing 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 |
Javascript
<script> // JavaScript 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 function fact(n) { var res = 1; for (var i = 2; i <= n; i++) res = res * i; return res; } // Function to find nCr function 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 function NumberOfWays(X, Y, M, N) { return fact(X + Y) * nCr(M, X) * nCr(N, Y); } // Driver code var X = 2, Y = 2, M = 3, N = 3; // Function call document.write(NumberOfWays(X, Y, M, N)); // This code is contributed by rdtank. </script> |
216
Time Complexity: O(n), time to calculate factorial of n
Auxiliary Space: O(1), as no extra space is required
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



