http://compprog.wordpress.com/2007/10/17/generating-combinations-1/
#include <iostream> #include <vector> using namespace std; void print(vector<char> chars, char array[], int k){ for(int j=0;j<k;j++) cout<<chars.at(array[j]); cout<<endl; } bool next(char array[], int n, int k){ int i=k-1; while(i>0){ if(array[i] >= n-k+i) i--; else break; } if(i==0 && array[0]== (n-k)) return false; array[i]++; for(int j=(i+1); j<= k-1; j++) array[j]=array[j-1]+1; return true; } void printAllCombination(std::vector<char> chars, int n, int k){ char *array = new char[n]; for(int i=0;i<k;i++)array[i]=i; print(chars, array, k); while(next(array, n, k)){ print(chars, array, k); } delete array; } int main() { int k ; int n ; cin>>k; cin>>n; std::vector<char> chars; for(int i=0;i<n;i++) { char temp; cin>>temp; chars.push_back(temp); } printAllCombination(chars, n, k); return 0; }