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.