嗨,我使用 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 个组合
嗨,我使用 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 个组合
这些是排列,而不是组合。
您可以使用它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
.)