← Back to topics
Topic

z. tegovi

r
renovator
Moze li neko da mi pomogne , plz. Predpostavljam da je neki opt. backtracking ali...
unapred , hvala.
r
renovator
uradio sam zad.Hvala bobi.
Pozdrav
d
dimitar
Kako si ga uradio?
r
renovator
evo ti objasnjenja:
Sve se svodi na jednu rekurzivnu funkciju i rad sa velikim brojevima.
Evo opisa rekurzivne funkcije :
void rek ( bool znak , Big num )
znak - da li treba oduzeti neki teg i num je broj za kojim tragamo.
kako tragas za brojem num ? Pa ovako :
ides redom za svaki teg ( od 3^0 ...) i gledas da ti teg koji trazis bude veci od num.Kada naidjes na taj teg proveravas da li se sa njim moze naciniti ta tezina num.Znas da je zbir svih tegova do nekog i-tog jednak (A[i]-1)/2.Znaci ti treba da proveris da li je A[i]+1 > 2*num.Ako jeste onda uzimas taj teg ( tezi od num ) dodajes ga na desni tas i menjas znak.Onda pozivas funkciju rekurzivno za taj novi znak i vrednost | A[i] - num |.
Ako se od tog tega A[i] ne moze naciniti tezina num onda uzimas (i-1)-vi element , ne menjas znak i pozivas opet rekurzivnu funkciju za ostatak.Rekurziju prekidas ukoliko se nadje jedan teg koji je jednak num.

evo primera :
znak = true , num se ucitava.
num = 95;
rek ( znak , num );
posle ovoga imas da znak ostaje isti posto se sa 243 ne moze obrazovati teg tezine num.Znaci uzimas 83 , znak ostaje isti , i posivas rek ( true , 95 - 83 ).
dalje :
num = 95 - 83 = 12;
trazis prvi koji je veci od 12 ( 27 ) i vidis da se od njega ne moze obrazovati num.Znaci uzimas 9 i pozivas rek ( true , 12-9 ).Ostaje ti funkcija rek(true , 3) a za 3 postoji jedan teg i rekurzija se prekida...

Ako ne razumes , mogu ti poslati kod.
pozdrav.
d
dimitar
Hvala, shvatio sam
d
drakce
Ama sta ce ti rekurzija.
Jednostavno delis sa 3 i alo je ostatak 0 nista se ne menja,
alo ke ostatak 1 dodajes na suprotan tas,
ako je ostatak 2 tezinu povecas za 1 i dods teg na taj tas.
to radis sve dog tezina tereta ne postane 0.