Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

algoritam za kombinacije( zadatak s roka )
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
aenima
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 17. 09. 2004. (17:03:42)
Postovi: (57)16
Spol: muško
Sarma = la pohva - posuda
= 1 - 0

PostPostano: 22:30 pon, 14. 8. 2006    Naslov: algoritam za kombinacije( zadatak s roka ) Citirajte i odgovorite

Trebam pomoć u vezi ovog zadatka, bar skica rješenja...hvala

Napišite program koji učitava cijele brojeve n<10 i k, te polje od n različitih znamenki( ne treba provjeravati jesu li različite ,može se pretpostaviti da niti jedna neće biti nula). Program treba ispisati sve brojeve koji se sastoje samo od znamenki iz polja, pri čemu se svaka znamenka javlja najviše k puta u svakom broju. Na primjer, ako su u polju znamenke 1,3 i 9 i ako je k=2, onda (između ostalih) treba ispisati brojeve 13991 i 93, a nesmije se ispisati naprimjer broj 9919.
Trebam pomoć u vezi ovog zadatka, bar skica rješenja...hvala

Napišite program koji učitava cijele brojeve n<10 i k, te polje od n različitih znamenki( ne treba provjeravati jesu li različite ,može se pretpostaviti da niti jedna neće biti nula). Program treba ispisati sve brojeve koji se sastoje samo od znamenki iz polja, pri čemu se svaka znamenka javlja najviše k puta u svakom broju. Na primjer, ako su u polju znamenke 1,3 i 9 i ako je k=2, onda (između ostalih) treba ispisati brojeve 13991 i 93, a nesmije se ispisati naprimjer broj 9919.


[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 7:47 uto, 15. 8. 2006    Naslov: Citirajte i odgovorite

Rekurzija. 8)

Uzmes polje [tt]niz[/tt] (globalno ili parametar rekurzije) duljine 10 koje na [tt]i[/tt]-tom mjestu ima [tt]k[/tt] ako je znamenka [tt]i[/tt] jedna od tih koje zelis, a inace ima [tt]0[/tt]. :-s Npr. za tvoj primjer, polje je
:nosmile: [tt]{0,2,0,2,0,0,0,0,0,2}[/tt] (ako sam dobro brojao O:))
U rekurziji imas petlju u kojoj neki [tt]i[/tt] ide od 0 do 9:
- Ako je [tt]niz[i] > 0[/tt], onda dodajes znamenku [tt]i[/tt] na kraj broja (broj je parametar funkcije, ergo lokalna varijabla), smanjujes [tt]niz[i][/tt] za jedan i pozivas rekurziju. 8) Kad izadjes van iz rekurzije, povecavas [tt]niz[i][/tt] za jedan i - ako je potrebno - vracas staru vrijednost broja, te ides na iduci korak petlje. 8)
- Ako uvjet u petlji nije ni jednom ispunjen (tj. [tt]niz[i] == 0[/tt] za sve [tt]i[/tt]), onda ispises broj. :)

Ovako nekako:
[code:1]void brojevi(unsigned long int br; int *niz) {
int i, flag = 0;
for (i = 0; i < 10; i++)
if (niz[i] > 0) {
flag = 1;
niz[i]--;
brojevi(10 * br + i, niz);
niz[i]++;
}
if (!flag) printf("%lu\n", br);
}[/code:1]

Prilikom poziva iz [tt]main()[/tt]-a, [tt]niz[/tt] mora biti inicijaliziran onako kako sam opisao, a [tt]br[/tt] mora biti nula. 8)

As always, ovo pisah napamet, pa su moguce greske i propusti. :blush:

P.S. Algoritam se lako prilagodi i tako da smijes imati nule u pocetnom nizu, ali to prepustam tebi. :xg:
Rekurzija. Cool

Uzmes polje niz (globalno ili parametar rekurzije) duljine 10 koje na i-tom mjestu ima k ako je znamenka i jedna od tih koje zelis, a inace ima 0. Eh? Npr. za tvoj primjer, polje je
Empty space 15x15 {0,2,0,2,0,0,0,0,0,2} (ako sam dobro brojao Angel)
U rekurziji imas petlju u kojoj neki i ide od 0 do 9:
- Ako je niz[i] > 0, onda dodajes znamenku i na kraj broja (broj je parametar funkcije, ergo lokalna varijabla), smanjujes niz[i] za jedan i pozivas rekurziju. Cool Kad izadjes van iz rekurzije, povecavas niz[i] za jedan i - ako je potrebno - vracas staru vrijednost broja, te ides na iduci korak petlje. Cool
- Ako uvjet u petlji nije ni jednom ispunjen (tj. niz[i] == 0 za sve i), onda ispises broj. Smile

Ovako nekako:
Kod:
void brojevi(unsigned long int br; int *niz) {
  int i, flag = 0;
  for (i = 0; i < 10; i++)
    if (niz[i] > 0) {
      flag = 1;
      niz[i]--;
      brojevi(10 * br + i, niz);
      niz[i]++;
    }
  if (!flag) printf("%lu\n", br);
}


Prilikom poziva iz main()-a, niz mora biti inicijaliziran onako kako sam opisao, a br mora biti nula. Cool

As always, ovo pisah napamet, pa su moguce greske i propusti. Blush

P.S. Algoritam se lako prilagodi i tako da smijes imati nule u pocetnom nizu, ali to prepustam tebi. Xmas Mr.Green



_________________
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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan