• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

generowanie wszystkich podzbiorów k elementowych zbiorów n elementowych

Object Storage Arubacloud
0 głosów
2,011 wizyt
pytanie zadane 7 listopada 2018 w C i C++ przez Halpi Początkujący (300 p.)
edycja 25 listopada 2018 przez Halpi
#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);
}

Program nie generuje tego co jest podane w poleceniu, czy ktoś wie jak to zrobć?

komentarz 7 listopada 2018 przez mokrowski Mędrzec (155,460 p.)
Nie sądzisz że w określeniu "co jest nie tak" pomaga informacja czego oczekujesz?
komentarz 25 listopada 2018 przez Halpi Początkujący (300 p.)
napisałem w temacie jaki jest polecenie, a program ktory wysłałem tego nie generuje, proszę o pomoc :)
komentarz 25 listopada 2018 przez mokrowski Mędrzec (155,460 p.)
Zapytałeś 07.11.2018.. dziś jest 25.11.2018. Dalej to inni nie rozumieją "w temacie polecenia".

1 odpowiedź

0 głosów
odpowiedź 4 stycznia 2019 przez Jarrow234 Obywatel (1,060 p.)
#include <stdio.h>
#include <algorithm>

void wypisz(int a[], int n)
{
    for(int i=0; i<n; i++)
    {
        if( a[i] )printf("%d", i+1);
    }
    printf("\n");
}

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++)
    {
        if(i<n-k)
            tab[i] = 0;
        else
            tab[i] = 1;
    }
    wypisz(tab,n);

    while( std::next_permutation(tab,tab+n) )
        wypisz(tab,n);
}

Tutaj masz rozwiązanie za pomocą funkcji std::next_permutation(). Na początku tworzymy tablicę która ma n-k zer oraz k jedynek. Funkcji next_permutation() podajemy wskaźniki na pierwszy i ostatni element tablicy, a ona zmienia tablicę tak, aby uzyskać następną leksykograficznie permutację. Jeśli w tablicy była ostatnia leksykograficznie permutacja to funkcja zwraca false(dlatego zera muszą być na początku). W ten sposób przechodzimy po wszystkich permutacjach tablicy zer i jedynek. Teraz w funkcji wypisz() poprostu wypisujemy liczbę, gdy na danej pozycji jest 1

Podobne pytania

0 głosów
2 odpowiedzi 373 wizyt
0 głosów
2 odpowiedzi 372 wizyt
+1 głos
1 odpowiedź 125 wizyt
pytanie zadane 25 stycznia 2023 w C i C++ przez diedassel Użytkownik (570 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...