#include <iostream>
int NumOfLetts;
void Function(char * Letters,int n);
int main()
{
int broj;
std::cout << "Unesi broj slova" << std::endl;
std::cin>>broj;
NumOfLetts=broj;
char * Slova=new char[broj];
std::cout<<"Unesi slova";
for(int i=0;i<broj;i++)
std::cin>>Slova[i];
Function(Slova,broj);
return 0;
}
void Function(char * Letters,int n)
{
int zamena=1;
char Backup[n];
for(int i=0;i<n;i++)
Backup[i]=Letters[NumOfLetts-n+i]; //backup
for(int i=0;i<n;i++)
for(zamena;zamena<=n;zamena++)
{
if(zamena !=1)
{
int z=n;
char aid=Letters[NumOfLetts-n];
for(int i=0;i<z-1;i++)
Letters[i+NumOfLetts-n]=Letters[i+NumOfLetts-n+1];
Letters[NumOfLetts-1]=aid;
}
if(n==2)
{
for(int j=0;j<NumOfLetts;j++)
std::cout<<Letters[j];
std::cout<<"\n";
continue;
}
Function(Letters,n-1);
}
for(int i=0;i<n;i++)
Letters[NumOfLetts-n+i]=Backup[i];
return;
}
Dakle funcija najpre backupuje array tako sto svaki pojedinacni karakter stavlja redom u pomocni array,odakle ce se pre
izlaska funkcije svako slovo vratiti na svoje mesto.
Funkcija ulazi u for petlju koja se obavlja onoliko puta koliko je slova koja se mogu zameniti.Ukoliko smo dosli do 2
poslednja slova stampamo ceo aray i ne idemo dalje.
Sada se poziva sama funkcija sa n umanjenim za 1(osim ako je n 2).
Posto se izvrsi for petlja vracamo karaktere gde su bili pre ulaska funkcije(kako bi funkcija koja je rekuzirvno pozvala ovu
funkciju mogla da sama izvrsi odgovarajucu zamenu karaktera).
(evo vidim da postoji par ispravki koje bi ubrzale delimicno program ali ne dovoljno(npr NumOfLetts-n nije potrebno stalno racunati posto se uvecava za svaki ulazak u novu funkciju za 1 ali mrzi me da sad to ispravljam).
Da bi se ispisale sve kombinacije od 10 slova potrebno je vise od 5 minuta sto je cini mi se jako puno.Ako vidite neke znacajne greske u algoritmu ispravite me plz.
[Ovu poruku je menjao Kretosh dana 09.04.2006. u 02:43 GMT+1]