podzbiory k-elementowe

Odpowiedz Nowy wątek
2014-12-20 20:00
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);
}

Pozostało 580 znaków

2014-12-20 20:14
1

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);
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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