Aritmetički trougao — rešenje
Pokušajte najpre da samostalno rešite zadatak. Čak i ako ne dođete do kompletnog rešenja, pokušaj razvijanja ideje je veoma važan za razvoj algoritamskog razmišljanja.
Uvod
Ovaj primer služi da pokaže razliku između edukativnog (simulacionog) pristupa i efikasne matematičke formule. Cilj je da učenici razumeju kako se redovi u trouglu grade i kako se iz toga izvode prve i poslednje vrednosti reda, pa na kraju i zbir redova. Prvo je prikazano Rešenje 1 — iterativni, edukativni pristup koji „gradi“ red po red.
Zadatak
Koliki je zbir brojeva u datom redu sledećeg trougla?
1
2 3 4
5 6 7 8 9
10 11 12 13 14 15 16
...
Ulaz
Sa standardnog ulaza se učitava broj n redova za koje je potrebno izračunati zbir
(celobrojna vrednost, 1 ≤ n ≤ 50 000).
Nakon toga se učitava n rednih brojeva redova k
(1 ≤ k ≤ 5·104) trougla čiji zbir treba izračunati
(brojanje redova počinje od 1).
Izlaz
Zbir vrednosti u svakom zadatom redu trougla
(po jedan red u izlazu za svaki upit).
Primer
Ulaz
3
1
2
3
Izlaz
1
9
35
Rešenje 1 — neefikasni (edukativni) pristup — objašnjenje
Ovo rešenje simulira gradnju trougla red po red.
Za traženi red k iterativno se povećava broj elemenata po redovima
(1, 3, 5, ...) dok se ne dođe do traženog reda.
-
Broj elemenata u redu:
2·k − 1 - Prvi i poslednji član reda određuju se pomoću poslednjeg člana prethodnog reda.
-
Zbir reda
računa se formulom za zbir aritmetičke progresije:
(prvi + poslednji) * broj_elemenata / 2
Prednost ovog pristupa je jednostavnost i dobra preglednost za učenike, ali je vremenska složenost O(k) po upitu.
Rešenje 2 — efikasno matematičko rešenje
Za razliku od prethodnog simulacionog pristupa, ovde pokušavamo da pronađemo matematički obrazac. Cilj je da direktno izračunamo:
- broj elemenata u redu,
- prvi broj reda,
- poslednji broj reda,
- i zbir reda,
bez iterativne gradnje trougla.
Na taj način dobijamo mnogo efikasnije rešenje
sa vremenskom složenošću O(1) po upitu.
|< Priprema za drzavno takmičenje i SIO