Witam, mam za zadanie napisanie programu wypisującego wszystkie n-elementowe kombinacje bez powtorzeń cyfr naturalnych czyli np 3-elementowe kombinacje zbioru 4 elementowego to będzie 0 1 2 3, 0 1 2 4, 0 1 3 4 itd, ma to być zrobione rekurencyjnie, ale jako że jestem dosyc poczatkujacy w programowaniu nie wiem za bardzo jak sie za to zabrac. Z góry dziękuje za pomoc :)
- Rejestracja:ponad 9 lat
- Ostatnio:około 9 lat
- Postów:6

- Rejestracja:prawie 14 lat
- Ostatnio:prawie 3 lata
- Postów:4882
0
dlaczego **raczej **zabronione?

- Rejestracja:ponad 12 lat
- Ostatnio:około 2 miesiące
- Lokalizacja:Kraków
- Postów:1055
1
Wydaje mi się że ten algorytm nie zadziałą, tam wypisane będzie np 123 i 132, a w kombinacjach bez powtorzeń 123 i 132 są tożsame.

- Rejestracja:ponad 19 lat
- Ostatnio:około 15 godzin
0
#include <iostream>
#include <vector>
using namespace std;
void short_permutation(vector<int> &tb,size_t count)
{
vector<size_t> idx(count);
for(size_t pos=0;pos<count;)
{
vector<size_t> tmp(idx);
for(size_t i=1;i<tmp.size();++i) for(size_t k=0;k<i;++k) tmp[i]+=(tmp[k]<=tmp[i]);
for(size_t i=0;i<tmp.size();++i) cout<<(" "+!i)<<tb[tmp[i]];
cout<<endl;
for(pos=count-1;(pos<count)&&((++idx[pos])>=tb.size()-pos);--pos) idx[pos]=0;
}
}
int main()
{
vector<int> tb{1,2,3,4,5,6};
short_permutation(tb,4);
return 0;
}
tylko ze, są tu powtórzenia np 2 1 2 5 i 2 1 2 6 (powtarzaja sie dwojki)
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
std::set
jest szablonem, a nie klasą :)