[ antonio_87 @ 14.06.2008. 21:35 ] @
Jel zna netko funkciju kojom se mogu dobit sve permutacije s ponavljanjem zadanog skupa?
dakle neka je zadan skup 0,1:
01
10
11
00
za 1,2,3:
123
132
213
231
321
312
111
222
333
122
122
112
133
.....

ako netko zna kako to programski ostvarit bio bi zahvalan jer mi je hitno.
[ glorius @ 17.06.2008. 21:39 ] @
Well, koliko se secam, obrazac bi trebao da bude:

n^n ( n na n-ti )

Inace, opsti obrazac je n^r ( npr. neka je n broj clanova skupa, a r broj clanova koji ce se 'vrteti' )...

----------------------------

Primer:

skup - 1, 2 , 3
r = 2

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

Ukupno 9 ( 3^2 = 9 )

----------------------------


Code:


long Izracunaj(long n, long r)
{
     long rez = 1;

     for(int i=0;i<r;i++)
         rez *= n;

     return rez;
}

[ Mali Misha @ 24.06.2008. 21:38 ] @
Prvo, ako ne mešaš uvek nizove uzastopnih brojeva (tj. može se raditi i o nizu poput {2,1000,201,5,15}), trebao bi da izlazne brojeve čuvaš u odvojenom nizu, a pri računu barataš sa indeksima. I kako. Recimo da imaš četri broja, dakle praviš četvoročlani niz, i postaviš mu sve vrednosti na 0. To je prva kombinacija. Onda prvi uvećaš za 1, pa proveriš da li je prekoračio dozovoljeni indeks. Ako jeste, postaviš ga na opet na nulu, a sledeći indeks uvećaš za jedan pa onda za njega izvršiš proveru. Uvek uvećavaš samo prvi indeks pa onda ostale po potrebi. Algoritam se završava kad poslednji indeks prekorači dozvoljenu vrednost, a u suprotnom (algoritam se nije završio) si dobio sledeću kombinaciju. To je to.

*izmena*
Pih, imaš sreće. Omaklo mi se da napišem ovo.

[Ovu poruku je menjao Mali Misha dana 24.06.2008. u 23:00 GMT+1]