【问题标题】:Getting Least Common Equal Sum and Combination of Two Sets of Numbers获得两组数字的最小公等和和组合
【发布时间】:2012-10-18 17:03:10
【问题描述】:

我目前正在用 C# 创建一个程序,该程序将寻找两组数字的最小可能相等之和,您可以在其中重复这些数字任意多次。

例如,我有这两组{ 10, 13, 18 }{ 12, 16, 22 }。我能得到的最低金额是 28(10 + 18)(12 + 16)

另一个例子是{5, 7, 9}{1, 2, 3}。最小可能的总和是 5(5)(1+1+1+1+1)(1+2+2)(2+3) 等等。

关于我可以从哪里开始的任何建议?我实际上每组将使用 6 个数字,并且数字在数百/数千标记内。

【问题讨论】:

  • 提示:如果您能找到一种方法来为给定集合按升序生成所有可能的总和,您可以使用列表合并来找到两个集合共享的最小总和。
  • 我不太确定如何以最少的代码工作量生成可能的总和。让我看看我能想出什么。
  • 我也不是 100% 确定,但我认为生成每个排序的总和列表将涉及递归合并所有可能的总和列表,您可以通过将每个不同的元素添加到总和中来获得远。
  • 谢谢,不知何故,根据你刚才所说的,我有了一个想法。

标签: math combinatorics


【解决方案1】:

维护两个集合,从您的输入集合初始化,并按递增的数字排序(例如,使用基于树的集合结构)。现在比较两组中的第一个(即最小)元素。您从其集合中删除较小的元素,将相应输入集中的所有元素添加到该值,然后插入结果。当两个集合具有相同的最小元素时,您就完成了,并且该元素是您的最小公等和。

【讨论】:

  • 谢谢,让我研究一下如何做你的建议。
  • 我能够进行一些迭代来获得总和。 List.Intersect() 可以快速跟踪我是否有一个共同的总和。感谢您的提示。
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
相关资源
最近更新 更多