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 i.e 3
The total number of ways of choosing 2 consonants from a total number of 3 consonants is i.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 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; } |
Java
// 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 |
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 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 |
C#
// 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 |
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 neveropen!