← Back to topics
Topic

Opet zadatak Niz

b
bocete
Probao sam da uradim ovo na neki svoj nachin, i naravno ne radi. Ideja je ovakva:

Mnozhenje sa 4 sam ovako zamislio: neka je broj niz cifara tipa byte. Svaka od tih cifara ima vrednost izmedju 0 i 9. Kada mnozhim sa 4 svaka od tih cifara se mnozhi sa 4, a zatim se proverava da li je koja cifra vetja od 9; ukoliko jeste, cifra desetica se dodaje na cifru jedinica sledetje cifre i zatim izbacuje.

Primer: Broj je "4 5 6". Kada mnozhim sa 4, svaku cifru mnozhim sa 4, tako da dobijem "16 20 24", a zatim cifre desetica prebacujem na sledetje 'vetje' cifre: "1 8 2 4".

svaka od 10 mogutjih cifara ima svoju vrednost koja je ujedno zbir cifara te cifre, jeli, i ima fiksiran zbir cifara posle mnozhenja sa 4. Tabela je ova:

0 -> 0 (promena sume cifara: +0)
1 -> 4 (promena sume cifara: +3)
2 -> 8 (promena sume cifara: +6)
3 -> 3 (promena sume cifara: +0)
4 -> 7 (promena sume cifara: +3)
5 -> 2 (promena sume cifara: -3)
6 -> 6 (promena sume cifara: +0)
7 -> 10 (promena sume cifara: +3)
8 -> 5 (promena sume cifara: -3)
9 -> 9 (promena sume cifara: +0).

Ja dakle mogu da prolaskom kroz sve cifre broja, koristetji ovu tabelu gore mogu da odredim za koliko tje sledetji broj u nizu imati vetju/manju sumu cifara.

Osim kada su susedne cifre 28, 29, 78, 79 kada se dodatno suma cifara smanjuje za 9. Ovo me mrzi da objashnjavam, ali tako je i ne komplikuje stvari mnogo.

A kada imam broj za koliko treba povetjati/smanjiti cifre, ako pazim da dobijeni broj bude vetji od prethodnog, zadatak je reshen.

Ako je modifikator sume cifara pozitivan, onda treba povetjavati cifre jedinica za 1 a smanjivati mod za 1 sve dok ta cifra ne bude 9, kada prelazim na desetice i tako dok mod ne bude 0.

A ako je mod manji od nule, shto je redak sluchaj, uzeo sam da ide brute-force broj po broj dok ne naidje na trazheni sledetji broj.. i tako.


Mogu da ostavim i kod, ali ne mislim da je potreban; ukoliko jeste, nije problem.
Jel mi je ideja shuplja, ili spora, ili suvishe komplikovana da bi radila.. Prolaze mi samo 2 test primera, uvek pogreshan rezultat sem u jednom gde nema vremena. Mozhe biti bitno da sam za broj uzeo string, a ostalo longinti. Sumnjam, nisam nashao nishta shto bi bilo prekorachenje budutji da "ruchno" sabiram i mnozhim..
r
renovator
da li si pokusao da skapiras resenja sa predhodene 'niz' teme.
Ako nisi pokusaj.Imas tamo i Boneli-jev kod u Pascalu i moj ,na kraju, u C++ pa sta ti odgovara.Nisam se bas trudio da razumem ono sto si pisao, ali sam siguran da je istaknut laksi nacin za resavanje ovog zadatka.