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:
// 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 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 |
# 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# 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 |
<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>
|
Output:
216
Time Complexity: O(n), time to calculate factorial of n
Auxiliary Space: O(1), as no extra space is required