Po burzy z mojego rozwiązania wrzucam kolejne, które uwzględnia powtórzenia zbiorów. Mało zmian bo tylko jeden szczegół w linii:
words(word.substr(i, j), out+word.at(i), len);
W tym przypadku zostaną odrzucone powtórzenie zbiorów, a w tym:
words(word, out+word.at(i), len);
już nie.
Cały kod:
#include <iostream>
using namespace std;
void words(string word, string out, int len){
if(out.length() == len){
cout << out << endl;
return;
}
for(int i = 0, j = word.length(); i < j; ++i){
words(word, out+word.at(i), len);
}
}
int main(){
words("abc", "", 4);
return 0;
}
Teraz liczę na lepsze przyjęcie, ale zawsze jest ale.