podzbiory k-elementowe

0

Mam do napisania program rekurencyjny, który ze zbioru n-elementowego 1,2,3...n wypisuje wszystkie zbiory k-elementowe
Średnio wiem jak to zrobić, kod który napisałem generuje np dla n=6,k=4 podzbiory:
1234,1235,1245,1345,2345,2346,2356,2456,3456 i nie mam pomyslu jak wygenerowac resztę, prosiłbym o pomoc

 #include <stdio.h>
void wypisz(int a[],int k)
{
    int i;

    for (i = 0; i < k; i++)
     {
	   printf("%d", a[i]);
	
}
printf("\n");
}

void podzbiory(int n, int k,int tab[])
{	
	int i=0,j=0;
		while(tab[i]+1<=tab[k-1])i=i+1;
		if(tab[i]==n)
		{
		return;
		}
		if(tab[i]<n)
		{
			tab[i]=tab[i]+1;
			wypisz(tab,k);
			i=i-1;
			while(i>=0)	
			{
			tab[i]=tab[i]+1;
			wypisz(tab,k);
			i=i-1;
			podzbiory(n,k,tab);
			}
		}

}		
		
	
int main(void)
{
	int i,n,k;
	printf("Podaj n\n");
	scanf("%d", &n);
    printf("Podaj k\n");
	scanf("%d", &k);
	int tab[n];
		for(i=0;i<n;i++)tab[i]=i+1;
	wypisz(tab,k);
	podzbiory(n,k,tab);
}
2

O je, potwornie skomplikowany problem z jedną pętlą! :

void podzbiory(unsigned n,unsigned k,unsigned tab[])
  {
   if(k) for(--k;n>0;podzbiory(--n,k,tab)) tab[k]=n;
   else wypisz(tab,k);
  }

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