2013-11-03 61 views
3

我必須在C++應用程序中使用3個整數查找所有組合,而不需要重複。查找所有沒有重複的組合

當我指定有多少個整數時,我可以計算出有多少組合。

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

但是,我怎樣才能加入到vector這些所有的組合? f.e使用:1,2,3, 4123,234,124,134。訂單並不重要,123321相同。

+0

使用std :: vector :: push_back(...)函數? – klm123

+0

但我怎麼能計算出這些:'123','234','124','134' – Disa

回答

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。我沒有在這裏,因爲它在許多編譯器中尚不可用或默認。

+0

感謝這個代碼,但它也計算所有組合也以另一種順序(重複)。檢查我的第一篇文章:f.e使用:1,2,3,4,123,234,124,134。順序不重要,'123'與'321'相同。 – Disa

+0

此外,在第二個:我認爲它應該是'it2 ++'而不是'it1 ++' – Disa

+0

查看更新的答案。 –