Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Pořadí kombinace v poli

inac asi ta bude iritovat ze potrebujes aj riadok tabulky C s indexom 0, ten bude cely vyplneny 1-ckami (pocet kombinacii 0 prvkov z cohokolvek je 1, lebo cokolvek! / cokolvek!*0! = 1, 0!=1 to je tak tusim dohodnute definiciou).
Priklad:
3 z 6 (X=3, Y=6):
123, 124, 125, 126, 134, 135, 136, 145, 146, 156, 234, 235, 236, 245, 246, 256, 345, 346, 356, 456

C(a,b) = b! / (a! * (b-a)!), a<=X, b<=Y:
  b= 1   2   3   4   5   6
a ------------------------
0 | 1   1   1   1   1   1
1 | 1   2   3   4   5   6
2 | -   1   3   6  10  15
3 | -   -   1   4  10  20
polia oznacene "-" nepocitat nemaju zmysel, mozu byt inicializovane na 0, C pocitat len pre polia ak a<=b
123: offset 0, 0 + 0 + 0 = 0
124: offset 1, 0 + 0 + C(X-3, Y-1 - 2.cislo) = C(0, 3) = 1
125: offset 2, 0 + 0 + C(X-3, Y-1 - 2.cislo) + C(X-3, Y-2 - 2.cislo) = C(0, 3)+C(0, 2) = 2
... skus si overit ci sedia vsetky, negarantujem ze je to 100% spravne...
a napr. zoberiem len tak nieco zo stredu:
246: offset C(X-1, Y-1) + C(X-2, Y-1 - 1.cislo) + C(X-3, Y-1 - 2.cislo) = C(2,5)+C(1,3)+C(0,1) = 10+3+1 = 14 - suhlasi, 246 je na offsete 14 (vid vyssie). offsety sa pocitaju od 0 (prve cislo je offset 0).

P.S. inac predtym ako tento algoritmus zavolas, si overit ze vstup je spravny, t.j. ze kazda cifra je vacsia ako jej predchadzajuca cifra, ak nie tak tu kombinaciu zorad pred zavolanim tohoto algoritmu.
A pred zavolanim algoritmu si overit aj ze ziadna z cifier neprekracuje max.povolenu (t.j. ze kazda cifra <= Y a ze ziadna cifra nie je <=0).
P.S.2. a ak budes pracovat s indexami prvkov (0...Y-1) a nie s ciframi (1..Y) tak potom jednoducho vsade kde sa v indexe pola C vyskytuje cifra, pridaj este +1)

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny