3

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

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

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

4

1 回答 1

7

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

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

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

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

于 2011-01-10T03:30:51.253 回答