Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Taulukon kaikki kombinaatiot

Olli Vanhoja [18.02.2009 14:18:08]

#

Olen tässä pohtinut millä algoritmilla saisin C:llä revittyä yksiulotteisen taulukon kaikki kombinaatiot kun määrittelyjoukko on 0...a ja alkioiden määrä on n.

Eli:

a_0, a_1, a_2 ... a_n = array[n]


Parilla sisäkkäisellä for-loopilla tietysti saa tämän auki jos a on ennalta tunnettu.

Antti Laaksonen [18.02.2009 14:20:18]

#

Onkohan tässä vinkissä haluamasi tieto?

https://www.ohjelmointiputka.net/koodivinkit/24950-c-järjestykset-ja-osajoukot

Olli Vanhoja [20.02.2009 18:09:46]

#

Juu kiitos paljon :) Olishan tuo pitänyt itsekin muistaa.

Jaska [20.02.2009 19:09:07]

#

Alkioita a_0, a_1, a_2 ... a_n on n+1 kappaletta, mutta toisaalta alkioiden määrä on n. En ymmärrä.

Olli Vanhoja [20.02.2009 20:16:25]

#

oho n-1 ehkä ennemmin :)

Äh oikeastaan paljon hyödyllisempää olisi
saada esim. kombinaatiot:

1, 1, 1
1, 1, 2
1, 1, 3
1, 2, 3
1, 2, 2
2, 2, 2
1, 3, 3
2, 3, 3
3, 3, 3

Eikä siis:

1, 2, 3
1, 3, 2
3, 2, 1
3, 1, 2
2, 1, 3
2, 3, 1

Jälkimmäisillä ei ole merkitystä minulle.

Antti Laaksonen [20.02.2009 20:28:18]

#

Voisitko vielä selventää, millaisia yhdistelmiä haluat tuottaa?

Tuon esimerkin perusteella sama luku saa esiintyä monta kertaa ja seuraava luku ei saa olla edellistä pienempi, mutta yhdistelmä 2, 2, 3 puuttuu.

Jos arvasin kuitenkin oikein, tässä on ohjelma:

#include <stdio.h>

int t[20];

void haku(int k, int n, int p, int r) {
    int i;
    if (k == p) {
        for (i = 0; i < p; i++) {
            printf("%i ", t[i]);
        }
        printf("\n");
        return;
    }
    for (i = r; i <= n; i++) {
        t[k] = i;
        haku(k+1, n, p, i);
    }
}

int main(void) {
    haku(0, 3, 3, 1);
}

Olli Vanhoja [21.02.2009 10:37:52]

#

Äh ei ole nyt oma ulosantini kovin selkeää, mutta tämä viimeinen oli se mitä hain.
Kiitän ja kumarran.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta