Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
sir1 Gost
|
Postano: 20:35 ned, 19. 9. 2004 Naslov: permutacije |
|
|
Ima li koja dobra duša da mi riješi ovaj zadatak(dva)?
Napisite program koji ucitava neku rijec i ispisuje sve permutacije slova tih rijeci.
npr. sad -> sda, ads, asd, dsa, das
i koji ispisuje sve permutacije nekog broja
npr. 123 -> 132,231,213,312,321
Ima li koja dobra duša da mi riješi ovaj zadatak(dva)?
Napisite program koji ucitava neku rijec i ispisuje sve permutacije slova tih rijeci.
npr. sad -> sda, ads, asd, dsa, das
i koji ispisuje sve permutacije nekog broja
npr. 123 -> 132,231,213,312,321
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 21:15 ned, 19. 9. 2004 Naslov: |
|
|
[code:1]int perm(char *s, char *new, int k) {
int i, len;
char old;
if ((len = strlen(s)) == k)
printf("%s\n", new);
else
for (i = 0; i < len; i++) {
if (s[i] != '*') {
old = s[i];
s[i] = '*';
new[k] = old;
perm(s, new, k + 1);
s[i] = old;
new[k] = '\0';
}
}
}
// Poziv:
int main() {
char *s, *n;
int i;
s = (char *)malloc(4 * sizeof(char));
strcpy(s, "sad");
n = (char *)malloc((strlen(s) + 1) * sizeof(char));
for (i = 0; i < strlen(s); i++)
n[i] = '\0';
perm(s, n, 0);
free(n);
free(s);
}[/code:1]
Moglo se to i ljepse, ali mi se ovako cinilo najpreglednije. :)
Kod: | int perm(char *s, char *new, int k) {
int i, len;
char old;
if ((len = strlen(s)) == k)
printf("%s\n", new);
else
for (i = 0; i < len; i++) {
if (s[i] != '*') {
old = s[i];
s[i] = '*';
new[k] = old;
perm(s, new, k + 1);
s[i] = old;
new[k] = '\0';
}
}
}
// Poziv:
int main() {
char *s, *n;
int i;
s = (char *)malloc(4 * sizeof(char));
strcpy(s, "sad");
n = (char *)malloc((strlen(s) + 1) * sizeof(char));
for (i = 0; i < strlen(s); i++)
n[i] = '\0';
perm(s, n, 0);
free(n);
free(s);
} |
Moglo se to i ljepse, ali mi se ovako cinilo najpreglednije.
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
ZELENIZUBNAPLANETIDO SADE Forumaš(ica)


Pridružen/a: 04. 03. 2004. (19:56:15) Postovi: (54F)16
Lokacija: hm?
|
Postano: 22:23 ned, 19. 9. 2004 Naslov: |
|
|
A bez rekurzije? ;)
A bez rekurzije?
_________________
Pupoljak nije negiran. Rekao sam to i ponovit cu to jos jedanput. Pupoljak NIJE negirAn.
MADD
(Mothers Against Dirty Dialectics)
Based on a true story. NOT.
Ko ih sljivi, mi sviramo punk 
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
Ce Gost
|
Postano: 17:47 sub, 3. 6. 2006 Naslov: |
|
|
Bi li mi netko mogao objasniti princip kako da ispisem sve permutacije n-clanog skupa /ne niza brojeva od 1 do n!/ (koji je dan u nekakvom polju),pa da ja to probam srocit u kod?
Mislim,to bi trebalo ici nekako ovako: fixiramo jedan element i ispermutiramo sve ostale,koje permutiramo opet tako da fixiramo jedan pa ispermutiramo ostale itd. Tu se vidi da mi treba nekakva for petlja kojom fixiram element i unutar nje rekurzivni poziv i tako,al nejde mi bas kad to treba tocno zapisati. :?
ovaj gornji vsegov kod radi za troclani skup,kod cetveroclanog vec ispisuje nekakav cudan znak na kraju svake permutacije,a kod npr.sesteroclanog skupa ispisuje samo permutacije koje pocinju sa zadnja tri elementa skupa.
Eto. Hvala na bilo kakvoj pomoci. :)
Bi li mi netko mogao objasniti princip kako da ispisem sve permutacije n-clanog skupa /ne niza brojeva od 1 do n!/ (koji je dan u nekakvom polju),pa da ja to probam srocit u kod?
Mislim,to bi trebalo ici nekako ovako: fixiramo jedan element i ispermutiramo sve ostale,koje permutiramo opet tako da fixiramo jedan pa ispermutiramo ostale itd. Tu se vidi da mi treba nekakva for petlja kojom fixiram element i unutar nje rekurzivni poziv i tako,al nejde mi bas kad to treba tocno zapisati.
ovaj gornji vsegov kod radi za troclani skup,kod cetveroclanog vec ispisuje nekakav cudan znak na kraju svake permutacije,a kod npr.sesteroclanog skupa ispisuje samo permutacije koje pocinju sa zadnja tri elementa skupa.
Eto. Hvala na bilo kakvoj pomoci.
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 19:28 sub, 3. 6. 2006 Naslov: |
|
|
[quote="Ce"]Bi li mi netko mogao objasniti princip kako da ispisem sve permutacije n-clanog skupa /ne niza brojeva od 1 do n!/ (koji je dan u nekakvom polju),pa da ja to probam srocit u kod?[/quote]
Svejedno je permutiras li niz brojeva od 1 do n ili n-clani skup. 8)
[quote="Ce"]ovaj gornji vsegov kod radi za troclani skup,kod cetveroclanog vec ispisuje nekakav cudan znak na kraju svake permutacije,a kod npr.sesteroclanog skupa ispisuje samo permutacije koje pocinju sa zadnja tri elementa skupa.[/quote]
vsegin kod alocira memoriju za 4 [tt]char[/tt]-a, sto odgovara stringu do 3 slova. 8) Kod se lako modificira za vise. ;)
Ce (napisa): | Bi li mi netko mogao objasniti princip kako da ispisem sve permutacije n-clanog skupa /ne niza brojeva od 1 do n!/ (koji je dan u nekakvom polju),pa da ja to probam srocit u kod? |
Svejedno je permutiras li niz brojeva od 1 do n ili n-clani skup.
Ce (napisa): | ovaj gornji vsegov kod radi za troclani skup,kod cetveroclanog vec ispisuje nekakav cudan znak na kraju svake permutacije,a kod npr.sesteroclanog skupa ispisuje samo permutacije koje pocinju sa zadnja tri elementa skupa. |
vsegin kod alocira memoriju za 4 char-a, sto odgovara stringu do 3 slova. Kod se lako modificira za vise.
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
maitjas Forumaš(ica)


Pridružen/a: 23. 06. 2006. (17:51:54) Postovi: (A)16
Spol: 
|
Postano: 0:23 ned, 25. 6. 2006 Naslov: |
|
|
[quote="Ce"]Bi li mi netko mogao objasniti princip kako da ispisem sve permutacije n-clanog skupa, pa da ja to probam srocit u kod?[/quote]
Evo srocen tebi kod, pa ti princip skuziti probaj.
[code:1]int *p=NULL;
int n;
void printaj(int *p) {
int i;
printf("\n");
for(i=0;i<n;i++)
printf("%d",p[i]);
}
void rotirka(int m) {
int i,t;
t=p[m];
for(i=m;i<n-1;i++)
p[i]=p[i+1];
p[n-1]=t;
}
void perm(int poc) {
int i;
if(n-poc<2)
return;
for(i=poc;i<n-1;i++) {
perm(poc+1);
rotirka(poc);
printaj(p);
}
perm(poc+1);
rotirka(poc);
}
int main() {
int j;
printf("n=");
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int));
for(j=0;j<n;j++)
p[j]=j+1; //printaj(p);
perm(0);
free(p);
}[/code:1]
Zadatak sam manje vise (vise) prepisao iz Vulinove zbirke. Sto se tice (ovog) principa... :roll:
Ce (napisa): | Bi li mi netko mogao objasniti princip kako da ispisem sve permutacije n-clanog skupa, pa da ja to probam srocit u kod? |
Evo srocen tebi kod, pa ti princip skuziti probaj.
Kod: | int *p=NULL;
int n;
void printaj(int *p) {
int i;
printf("\n");
for(i=0;i<n;i++)
printf("%d",p[i]);
}
void rotirka(int m) {
int i,t;
t=p[m];
for(i=m;i<n-1;i++)
p[i]=p[i+1];
p[n-1]=t;
}
void perm(int poc) {
int i;
if(n-poc<2)
return;
for(i=poc;i<n-1;i++) {
perm(poc+1);
rotirka(poc);
printaj(p);
}
perm(poc+1);
rotirka(poc);
}
int main() {
int j;
printf("n=");
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int));
for(j=0;j<n;j++)
p[j]=j+1; //printaj(p);
perm(0);
free(p);
} |
Zadatak sam manje vise (vise) prepisao iz Vulinove zbirke. Sto se tice (ovog) principa...
|
|
[Vrh] |
|
mdoko Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol: 
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
|