[ miki_infinity @ 15.09.2011. 23:33 ] @
U pitanju je daleko od jednostavnog, program "moj broj".Jel ima neko uopste ideju kako poceti ovaj zadatak.Naime,program radi kao i onaj kod slagalice na rts 1,unosimo neki broj koji trebamo pronaci, zatim 4 jednocifrena, i neki od ovih (10-15-20-25),i ovih (25-50-75-100)?nebitno da li je c ili c++.
[ Mihajlo Cvetanović @ 16.09.2011. 09:23 ] @
Ovaj problem se rešava grubom silom, jer broj kombinacija nije preterano veliki. Svaki matematički izraz može se predstaviti kao stablo u kome su brojevi u listovima stabla, a operacije (+ - * /) u ostalim čvorovima. Prvi deo algoritma treba da bude generisanje svih mogućih različitih stabala koja nemaju više od šest listova (jer imaš maksimalno šest brojeva na raspolaganju). Drugi deo algoritma je da za svako takvo stablo treba provrtiš sve moguće kombinacije brojeva i operacija. Ako naletiš na traženi rezultat onda si pronašao i matematički izraz za njega. Povedi računa o tome da rezultat bilo kog deljenja mora uvek da bude ceo broj.

Prvih par stabala:

 1 *   2   *   3     *     4   *       5      *      
/ \ / \ / \ / \
* * * * * * * *
/ \ / \ / \ / \
* * * * * * * *


Pretpostavljam da je najlakše konstruisati stabla tako što uzmeš postojeće stablo i početni list i rekurzivno u petlji svakom listu počevši od datog početnog dodaš dve podgrane. Rekurzivno pozivaš funkciju generisanja stabla sa novim stablom i novim levim listom kao početnim. Ideja je da ne diraš listove koji su levo od datog početnog, jer si se njima bavio u prethodnim rekurzivnim pozivima funkcije. Ako iskoristiš ovu ideju onda će kao rezultat prvih par stabala biti:

 1 *   2   *   3     *     4       *       5      *
/ \ / \ / \ / \
* * * * * * * *
/ \ / \ / \
* * * * * *
/ \ / \
* * * *
/ \
* *


Kad funkcija dođe do 6 listova onda treba da pređe na komplikovanije oblike stabla.

Što se tiče popunjavanja stabla stvari su proste. Listove popunjavaš brojevima, i tu imaš varijacije bez ponavljanja. Ostale čvorove popunjavaš matematičkim operacijama i tu imaš varijacije sa ponavljanjem.
[ X Files @ 16.09.2011. 10:42 ] @
Zagrade?
[ Mihajlo Cvetanović @ 16.09.2011. 11:14 ] @
Najjednostavnije je staviti ih za svaku operaciju (svaki čvor), ali priznajem da je to malo nečitljivo. Optimizacija je već stvar kozmetike, pa cenim da prvo rešimo problem, a onda da se bavimo uklanjanjem viška zagrada.
[ X Files @ 16.09.2011. 11:26 ] @
Ok.