3

我必须在 C++ 应用程序中找到使用 3 个整数而不重复的所有组合。

当我指定我有多少个整数时,我可以计算出将有多少个组合。

unsigned int combinations(unsigned int n){
    return ((n/3) * ((n-1)/2) * (n-2));
}

但是我怎样才能添加到vector所有的组合中呢?fe 使用:1, 2, 3, 4: 123, 234, 124, 134. 顺序不重要,与123相同321

4

1 回答 1

4
#include <vector>

using namespace std;

struct tuple3 {
    int a, b, c;   
    tuple3(int a, int b, int c) : a(a), b(b), c(c) {}
};

vector<tuple3> combinations3(vector<int> n) {
    vector<tuple3> ret;
    for(vector<int>::const_iterator it1 = n.begin(); it1 < n.end(); it1++) {
        for(vector<int>::const_iterator it2 = n.begin(); it2 < it1; it2++) {
            for(vector<int>::const_iterator it3 = n.begin(); it3 < it2; it3++) {
                ret.push_back(tuple3(*it1, *it2, *it3));
            }
        }
    }
    return ret;
}

致未来的读者:使用 C++11std::array或者std::tuple如果可以的话。我没有在这里,因为它在许多编译器上尚不可用或默认。

于 2013-11-03T10:05:44.200 回答