【问题标题】:getting all combinations from numbers without repeating从数字中获取所有组合而不重复
【发布时间】:2023-04-05 05:14:01
【问题描述】:

嗨 我使用 c++,我能找到简单的方法从一组包含所有可能组合的数字中获取一个数组吗? 例如:{1,2,3}

  { {3,1,2},
   {1,2,3},
   {3,2,1},
   {1,3,2},
   {2,1,3},
   {2,3,1}
  };

如果我得到 5 个或更多数字的问题如何使有 120 个组合

【问题讨论】:

  • 你正在寻找的是一种叫做“powerset”的东西,因此这是combinations algorithm的副本
  • @Mark:根据 OP 的示例和数字,我认为他实际上是指 permutations,而不是 combinations。 (我确定有重复,但 30 秒的快速搜索没有找到。)
  • @James,你是对的,虽然我确信这仍然是重复的,但我一定是错的。

标签: c++ visual-c++ permutation visual-c++-2008


【解决方案1】:

这些是排列,而不是组合。

您可以使用std::next_permutation 来计算序列的所有排列。它看起来像这样:

std::array<int, 3> data = { 1, 2, 3 };
do {
    // use current permutation
} while (std::next_permutation(data.begin(), data.end()));

(我在这个例子中使用了来自 C++0x 的 std::array;您还可以在 C++ TR1 和 Boost 中找到 array 容器。该算法也适用于任何双向可迭代的容器,例如 @ 987654326@.)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    相关资源
    最近更新 更多