我必须在C ++应用程序中找到使用3个整数而不重复的所有组合。
当我指定我有多少整数时,我可以计算出有多少组合。
unsigned int combinations(unsigned int n){
return ((n/3) * ((n-1)/2) * (n-2));
}
但是如何添加vector
所有组合?使用:1
,2
,3
,4
:123
,234
,124
,134
。订单并不重要,123
与321
相同。
答案 0 :(得分: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 ++ 11 std::array
或std::tuple
。我没有在这里,因为它还没有在许多编译器上可用或默认。