[C++] Wyznaczanie nie wszystkich możliwych kombinacji

0

Jak zrobić program który wyznaczy możliwe kombinacje n-elementowe z tablicy?? Chodzi mi oto aby np. z tablicy 3-elementowej {0,1,2} wypisał 2-elementowe kombinacje w tym przypadku {0,1}{0,2}{1,2} ale żeby nie wypisywał{1,0}{2,0}{2,1}. zrobiłem taki program

int tab[3]={0,1,2};
for(int i=0;i<3;i++)
{
    for(int j=0;j<3;j++)
    {
        if(i!=j)
        cout<<tab[i]<<" "<<tab[j]<<"\n";
    }
}

ale on wypisuje wszystkie możliwe a mi chodzi o co innego

0
Pokemaniak napisał(a)

ale on wypisuje wszystkie możliwe a mi chodzi o co innego</cpp>
[rotfl] piękne podsumowanie, prawie jak </delphi>.
http://pl.wikipedia.org/wiki/Permutacje
http://4programmers.net/Forum/search.php?q=permutacje

0

Sam do tego doszedłem :-P :-P :-P ma być tak:

int tab[10];
for(int i=0;i<10;i++)
{
    tab[i]=i;
}
for(int i=0;i<8;i++)
{
    for(int j=(i+1);j<9;j++)
    {
        for(int k=(j+1);k<10;k++)
        {
            if((i!=j)&&(j!=k)&&(i!=k))
            cout<<tab[i]<<" "<<tab[j]<<" "<<tab[k]<<"\n";
        }
    }
}
0

Jeżeli chcesz kombinacje o dowolnej długości:

template<typename T>
void print_comb(std::vector<T>& vec, int size) {
        std::vector<bool> bit_vec(vec.size());
        std::fill(bit_vec.rbegin(), bit_vec.rbegin()+size, true);
        std::vector<bool>::size_type i;
        do
        {
                for(i = 0; i < bit_vec.size(); i++)
                        if(bit_vec[i])
                                std::cout << vec[i] << ',';

                std::cout << std::endl;
        }while(std::next_permutation(bit_vec.begin(), bit_vec.end()));

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1