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.
Onkohan tässä vinkissä haluamasi tieto?
https://www.ohjelmointiputka.net/koodivinkit/
Juu kiitos paljon :) Olishan tuo pitänyt itsekin muistaa.
Alkioita a_0, a_1, a_2 ... a_n on n+1 kappaletta, mutta toisaalta alkioiden määrä on n. En ymmärrä.
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.
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); }
Äh ei ole nyt oma ulosantini kovin selkeää, mutta tämä viimeinen oli se mitä hain.
Kiitän ja kumarran.
Aihe on jo aika vanha, joten et voi enää vastata siihen.