2

我有我的家庭作业,我不知道如何从这类问题的代码开始。

假设我有一个包含 n 个元素的整数数组,

[A][B][C][D][E] (例如我们有 5 个元素)

我想列出所有可能性的总和,以便我想打印出所有组合的总和(ABCDE、ABCD、ABCE、ACDE、BCDE、ABC、ABD、ABE、ACE、ADE、BDE、CDE、AB、AC , AD, AE, BC, BD, BE, CD, CE, DE, A, B, C, D 和 E)

另一个示例是数组中的 4 个元素 ([A][B][C][D])

我想列出(ABCD、ABC、ABD、ACD、BCD、AB、AC、AD、BC、BD、CD、A、B、C 和 D)的所有组合的总和。

我希望你们都能理解我的问题。我需要帮助,但我不知道该怎么办?

4

3 回答 3

2

好吧,这是一个简单的规则:

“ABCDE”的所有组合的集合由包含(因此以)“A”和不包含“A”的组合组成。在这两种情况下,“BCDE”的所有组合都可能出现。当然,“BCDE”的组合可以以相同的方式处理。

于 2012-01-14T02:25:22.600 回答
0

当您说“列出所有可能性的总和”时,您的意思是您想知道实际上可能有多少种组合?

如果是,则搜索 N 项的组合,一次取 K;这个网站上有一些页面解决了这个问题。然后,您只需将 (by 5) + (by 4) + (by 3) + (by 2) + (by 1) 的组合数相加即可获得总“可能性总和”。

或者你的意思是你有一个值数组,你真的想打印出由元素的不同组合表示的不同总和?在这种情况下,您需要实际枚举所有组合并评估总和。

因此,给定一个 { 1, 2, 3, 4, 5 } 数组,您可以将其编码为“A”、“B”、“C”、“D”、“E”。元组的例子是:

  • ABCDE = 1+2+3+4+5
  • ABE = 1+2+5
  • 公元前 = 2+3+5

等,您使用编码的枚举为您的总和选择加数。请注意,决定是否允许重复(即“DE”与“ED”是否不同)将对您的结果产生非常大的影响;在大多数情况下,这可能不是您想要的。

于 2012-01-14T03:45:06.133 回答
0

如果你有 3 个元素,你可以想象每个元素放置在从 1 到 3(或 0 到 2)的某个位置,以及一个表示该元素是否包含在某个集合中的布尔数组。

ABC remark
--- ---------------------
000 no element in the set
001 one element, C
010 one element, b
100 ...
011 two elements, b and c
...
111 all elements contained

现在,如果您计算解的数量,在这种情况下为 2³,并生成一个函数,该函数执行从二进制表示到集合的映射,例如从 011 到 (b, c),那么您可以轻松地编写一个循环,它从 0 迭代到 max-1 并返回由映射函数生成的所有集合。

于 2012-01-14T07:40:00.893 回答