给定一个字符串str和两个整数P和Q。任务是找到可以通过从给定的字符串精确选择P个辅音和Q个元音来形成的单词总数。
例子:
Input: str = “geek”, P = 1, Q = 1
Output: 8
“ge”, “ge”, “eg”, “ek”, “eg”, “ek”,
“ke” and “ke” are the possible words.
Input: str = “crackathon”, P = 4, Q = 3
Output: 176400
方法:由于必须从给定字符串的辅音和元音的原始计数中选择P个辅音和Q个元音。所以,二项式系数可以用来计算选择这些字符的组合和所选择的字符可以在自己使用其计数值的阶乘地布置。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
#define lli long long int
// Function to return the value of nCk
lli binomialCoeff(lli n, lli k)
{
if (k == 0 || k == n)
return 1;
return binomialCoeff(n - 1, k - 1)
+ binomialCoeff(n - 1, k);
}
// Function to return the factorial of n
lli fact(lli n)
{
if (n >= 1)
return n * fact(n - 1);
else
return 1;
}
// Function that returns true if ch is a vowel
bool isVowel(char ch)
{
if (ch == 'a' || ch == 'e' || ch == 'i'
|| ch == 'o' || ch == 'u') {
return true;
}
return false;
}
// Function to return the number of words possible
lli countWords(string s, int p, int q)
{
// To store the count of vowels and
// consonanats in the given string
lli countc = 0, countv = 0;
for (int i = 0; i < s.length(); i++) {
// If current character is a vowel
if (isVowel(s[i]))
countv++;
else
countc++;
}
// Find the total possible words
lli a = binomialCoeff(countc, p);
lli b = binomialCoeff(countv, q);
lli c = fact(p + q);
lli ans = (a * b) * c;
return ans;
}
// Driver code
int main()
{
string s = "crackathon";
int p = 4, q = 3;
cout << countWords(s, p, q);
return 0;
}
Java
// Java implementation of the above approach
class GFG
{
// Function to return the value of nCk
static long binomialCoeff(long n, long k)
{
if (k == 0 || k == n)
return 1;
return binomialCoeff(n - 1, k - 1) +
binomialCoeff(n - 1, k);
}
// Function to return the factorial of n
static long fact(long n)
{
if (n >= 1)
return n * fact(n - 1);
else
return 1;
}
// Function that returns true if ch is a vowel
static boolean isVowel(char ch)
{
if (ch == 'a' || ch == 'e' || ch == 'i' ||
ch == 'o' || ch == 'u')
{
return true;
}
return false;
}
// Function to return the number of words possible
static long countWords(String s, int p, int q)
{
// To store the count of vowels and
// consonanats in the given string
long countc = 0, countv = 0;
for (int i = 0; i < s.length(); i++)
{
// If current character is a vowel
if (isVowel(s.charAt(i)))
countv++;
else
countc++;
}
// Find the total possible words
long a = binomialCoeff(countc, p);
long b = binomialCoeff(countv, q);
long c = fact(p + q);
long ans = (a * b) * c;
return ans;
}
// Driver code
public static void main (String[] args)
{
String s = "crackathon";
int p = 4, q = 3;
System.out.println(countWords(s, p, q));
}
}
// This Code is contributed by AnkitRai01
Python3
# Python3 implementation of the approach
# Function to return the value of nCk
def binomialCoeff(n, k):
if (k == 0 or k == n):
return 1
return binomialCoeff(n - 1, k - 1) + \
binomialCoeff(n - 1, k)
# Function to return the factorial of n
def fact(n):
if (n >= 1):
return n * fact(n - 1)
else:
return 1
# Function that returns true if ch is a vowel
def isVowel(ch):
if (ch == 'a' or ch == 'e' or
ch == 'i' or ch == 'o' or ch == 'u'):
return True
return False
# Function to return the number of words possible
def countWords(s, p, q):
# To store the count of vowels and
# consonanats in the given string
countc = 0
countv = 0
for i in range(len(s)):
# If current character is a vowel
if (isVowel(s[i])):
countv += 1
else:
countc += 1
# Find the total possible words
a = binomialCoeff(countc, p)
b = binomialCoeff(countv, q)
c = fact(p + q)
ans = (a * b) * c
return ans
# Driver code
s = "crackathon"
p = 4
q = 3
print(countWords(s, p, q))
# This code is contributed by Mohit Kumar
C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
class GFG
{
// Function to return the value of nCk
static long binomialCoeff(long n, long k)
{
if (k == 0 || k == n)
return 1;
return binomialCoeff(n - 1, k - 1) +
binomialCoeff(n - 1, k);
}
// Function to return the factorial of n
static long fact(long n)
{
if (n >= 1)
return n * fact(n - 1);
else
return 1;
}
// Function that returns true if ch is a vowel
static bool isVowel(char ch)
{
if (ch == 'a' || ch == 'e' || ch == 'i' ||
ch == 'o' || ch == 'u')
{
return true;
}
return false;
}
// Function to return the number of words possible
static long countWords(String s, int p, int q)
{
// To store the count of vowels and
// consonanats in the given string
long countc = 0, countv = 0;
for (int i = 0; i < s.Length; i++)
{
// If current character is a vowel
if (isVowel(s[i]))
countv++;
else
countc++;
}
// Find the total possible words
long a = binomialCoeff(countc, p);
long b = binomialCoeff(countv, q);
long c = fact(p + q);
long ans = (a * b) * c;
return ans;
}
// Driver code
public static void Main (String[] args)
{
String s = "crackathon";
int p = 4, q = 3;
Console.WriteLine(countWords(s, p, q));
}
}
// This code is contributed by PrinciRaj1992
Javascript
输出:
176400