【问题标题】:How to do list all the possible sums of combinations in an array for c++?如何在 C++ 的数组中列出所有可能的组合总和?
【发布时间】:2012-01-14 02:03:55
【问题描述】:

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

假设我有一个包含 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)的所有组合的总和。

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

【问题讨论】:

  • 5 元素案例有多少种组合? 4 元素的情况有多少种组合?这些数字是不是很眼熟?
  • 将一、二、三等元素组合视为一个单独的案例。编写代码以打印出仅一个元素的所有组合(应该很容易)。然后尝试为两个元素的组合编写代码,如果你不能让它工作,请告诉我们你做了什么。
  • @OliCharlesworth 该模式非常相似,但很难解释清楚。 ://
  • @OliCharlesworth:我建议的方法将允许(至少恕我直言)OP 慢慢发展他们可以理解的解决方案。类似启示的解决方案只能帮助优秀的学生;其他人倾向于只记住和复制,直到考试结束。在我看来,这里的案例是教授基础知识的问题,尽管您当然可以在技术方面指出更好的解决方案。

标签: c++ algorithm superset


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    如果是,则搜索 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”不同)将对您的结果产生非常大的影响;在大多数情况下,这可能不是您想要的。

    【讨论】:

    • 除了标题之外,很明显,搜索的不是超集中元素的数量,而是元素的总和。
    • 不管你是谁,几十年来与很多 ESL 的人一起工作过,我永远不会做出这样的假设——这正是我做出区分并提供两者的原因。提高询问的准确性是一种可能的结果,而无需往返澄清步骤的烦人延迟。很快
    【解决方案3】:

    如果你有 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 并返回由映射函数生成的所有集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多