我试图找到不同的固定长度序列,这些序列可以使用给定集合中的数字(不同的元素)生成,这样来自集合的每个元素都应该出现在序列中。以下是我的逻辑:
例如。让该集合由S个元素组成,并且我们必须生成长度为K(K> = S)
的序列1)首先,我们必须从K中选择S个位置,并以随机顺序放置集合中的每个元素。所以, C(K,S)* S!
2)之后,可以从集合中的任何值填充剩余的位置。因此,因素
(K-S)^ S 应该相乘。
所以,总体结果是
C(K,S)的取值!((K-S)^ S)
但是,我得到了错误的答案。请帮忙。
PS:C(K,S):无论顺序如何,从K个元素(K> = S)中选择S个元素的方式的数量。此外,^:幂符号,即2 ^ 3 = 8。
这是我在python中的代码:
# m is the no. of element to select from a set of n elements
# fact is a list containing factorial values i.e. fact[0] = 1, fact[3] = 6& so on.
def ways(m,n):
res = fact[n]/fact[n-m+1]*((n-m)**m)
return res
答案 0 :(得分:1)
你要找的是主域函数的数量,其域是一组K元素(我们在输出序列中填写的K个位置),图像是一组S元素(你的输入集) 。我认为这应该有效:
static int Count(int K, int S)
{
int sum = 0;
for (int i = 1; i <= S; i++)
{
sum += Pow(-1, (S-i)) * Fact(S) / (Fact(i) * Fact(S - i)) * Pow(i, K);
}
return sum;
}
... Pow
和Fact
就是您所期望的。
这就是为什么你的方法无法工作。我没有检查代码,只是你对其背后逻辑的解释,但是我是我确定我理解你要做的事情。我们假设K = 4,S = {7,8,9}。让我们检查序列7,8,9,7。这是一个独特的序列,但您可以通过以下方式实现:
随机选择位置1,2,3,随机填充7,8,9(您的步骤1),然后随机选择7作为剩余位置4(您的步骤2)。
< / LI>随机选择位置2,3,4,随机填充8,9,7(您的步骤1),然后随机选择7作为剩余位置1(您的步骤2)。
< / LI>根据你的逻辑,你将两种方式计算,即使它只计算一次,因为最终结果是相同的。等等...