I came up with this code which prints out all combinations as in

"c_choose_k"

so, if we have a vector of char abcdef, and we want all combinations

with 3 elements only, we make the 3 for loops as below,

int main(){>>>>>>>>>>>>>>>code <<<<<<<<<<<<<<<<

vector<strings;

s.push_back("1");

s.push_back("2");

s.push_back("3");

s.push_back("4");

s.push_back("5");

s.push_back("6");

for(unsigned p=0; p<s.size(); p++){

for(unsigned q=p+1; q<s.size(); q++)

for(unsigned r=q+1; r<s.size(); r++)

cout << s[p]

<< s[q]

<< s[r]

<< endl;

}

}

I am thinking to generalize it and make it more flexible, so that it

takes n and k and puts out a vector<vector<int each vector<int>

contains the combined elements and the main vector contains all the

combination vectors.

i.e

n = 3

k = 2

vector<int>.size() == k "2 in this case"

vector<vector<int .size() == n_choose_k "3" in this case

here, 3 is the number of combinations, and 2 is the number of digits

in each of the "k"

12

13

23

n = 6

k = 3

vector<int>.size() == k "3 in this case"

vector<vector<int .size() == n_choose_k "20 in this case"

so that the vector of vector looks like

123

124

125

126

134

135

136

145

146

156

234

235

236

245

246

256

345

346

356

456

so instead of feeding a vector of values to the routine, I can just

use the first argument "n" as an index representation of the number of

elements need to be combined, then use this index to get the element

combination in the client code.

I tried to do it recursively but need some help. I was thinking

vector<vector<int>n_choose_k(int n, int k){

static int nn = n;

vector<intvk;

vector<vector<int>vn;

int a = nn==n ? 0 : n+1;

for(int i=a; i<n; i++)

unsigned kk -= k;

ok, I am just scratching my head here...

vector.push_back(something) some where .. i give up

thanks