【问题标题】:Find all the combinations of numbers between min and max in php在php中查找最小值和最大值之间的所有数字组合
【发布时间】:2018-10-24 21:17:50
【问题描述】:

我正在尝试找出最优化的代码,该代码将找到 X 和 Y 之间给定列表的组合列表,如下所示:

  • A = 4
  • B = 6
  • C = 3
  • D = 5
  • E = 4
  • F = 1

假设 X = 7,Y = 16

So 查找总和大于或等于 X 且小于或等于 Y 的所有组合。这些值可以重复。

即:

  • AA
  • AAA
  • AAAA
  • ABA
  • ABB
  • ABC
  • ...
  • EE
  • EEE
  • EEEE
  • EA
  • EAA

...等等

最终条件:不应包含重复的安排。例如,ABB 与 BBA 和 BAB 相同。所以后两者不应该包括在内。

我正在尝试为此找到最优化的代码,因为输入列表最多可以包含 200 个数字...

【问题讨论】:

  • 什么?你问的是数字还是字母?我看不出这个问题的顶部和底部有什么关系。
  • @Andreas,A = 4,因此 A+A = 8,介于 X = 7 和 Y = 16 之间,因此包含在内,AAA 也是如此,因为 3xA = 12 其中 A = 4
  • 到目前为止你尝试过什么?你的方法看起来如何?
  • 我看到您最近访问过该网站。您有什么尝试与我们分享的吗?

标签: php combinatorics


【解决方案1】:

你需要做的事情:

  1. 循环我们所有的字母组合
  2. 按字母顺序排列组合,以便我们找到重复项。例如ABB 与 BAB 相同 - 请参阅 https://stackoverflow.com/a/9912497/897266
  3. 如果它是重复的,请将其标记为或排除它 - 请参阅https://stackoverflow.com/a/10096034/897266
  4. 计算每个组合值 - 见https://stackoverflow.com/a/49181225/897266
  5. 比较每个组合值以确认它在我们的最小/最大范围内 - 请参阅https://stackoverflow.com/a/4684064/897266
  6. 如果是则保留它,否则将其标记为不是或排除它
  7. 循环结束后,输出通过测试且不重复的组合集合

我可以用 php 写出所有这些内容,但我希望这是足够的指导,给你一个战斗的机会。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2018-05-03
    • 2018-07-04
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多