ZBIRKA ZADATAKA · OSNOVNA ŠKOLA

Kvalifikacije za okružna takmičenja iz informatike

U ovoj zbirci nalaze se zadaci sa kvalifikacija za okružna takmičenja iz informatike. Zadaci su organizovani prema redosledu originalne zbirke, uz odvojene postavke, ulaz, izlaz, primere i dodatna objašnjenja.

ZADATAK 01 2022/2023.

Gorivo

1. krug kvalifikacija 6. i 7. razred

Izvor zadatka: takprog.petlja.org — originalna zbirka zadataka

Potrebno predznanje: Podaci u C++ Operatori u C++

Postavka zadatka

Tri porodice koje žive u mestu A žele da otputuju na izlet u udaljeni grad B. Svaka porodica putuje svojim automobilom i pre puta treba da natoči gorivo, pri čemu je na pumpi neophodno kupiti uvek ceo broj litara goriva.

Ako je poznato rastojanje od mesta A do mesta B i ako je poznata potrošnja goriva svakog automobila na 100 kilometara, odrediti najmanju ukupnu količinu koju sve tri porodice zajedno treba da kupe da bi svi uspeli da stignu do grada B.

Ulaz

Sa standardnog ulaza se unosi prvo ceo broj r (10 ≤ r ≤ 1000) koji predstavlja rastojanje od mesta A do mesta B, u kilometrima, a zatim tri cela broja p1, p2, p3 (2 ≤ pi ≤ 20) koja predstavljaju potrošnju svakog od tri automobila na 100 kilometara.

Izlaz

Na standardni izlaz ispisati traženu minimalnu količinu goriva.

Primer 1

Ulaz

850
7
8
9

Izlaz

205
Objašnjenje primera

Prvom automobilu je potrebno 59,5 litara da bi prešao 850 kilometara, pa će kupiti 60 litara. Drugom je potrebno tačno 68 litara, a trećem 76,5 litara, pa će kupiti 77 litara benzina.

Ukupno će kupiti 60 + 68 + 77 = 205 litara benzina.

Primer 2

Ulaz

987
6
9
11

Izlaz

258
ZADATAK 02 2022/2023.

Kakuro provera

1. krug kvalifikacija 6. i 7. razred

Izvor zadatka: takprog.petlja.org — originalna zbirka zadataka

Potrebno predznanje: Podaci u C++ Operatori u C++ Grananje u programu

Postavka zadatka

U igri Kakuro potrebno je upisati cifre od 1 do 9 u prazna polja tabele u skladu sa unapred zadatim zbirovima vrsta i kolona, tako da se svaki zbir dobija sabiranjem različitih cifara.

Mi ćemo razmotriti jednostavnu varijantu ove igre u kojoj se brojevi upisuju u 4 polja, raspoređena u dve horizontalne (vodoravne) vrste i dve vertikalne (uspravne) kolone, tako da su unapred dati zbirovi svake vrste i svake kolone.

Napiši program koji proverava da li su cifre upisane u skladu sa pravilima igre Kakuro.

Ulaz

Prva linija standardnog ulaza sadrži dva pozitivna prirodna broja između 3 i 17 koji predstavljaju zbirove u svakoj od dve kolone. Naredna linija sadrži dva pozitivna prirodna broja između 3 i 17 koji predstavljaju zbirove u svakoj vrsti. Nakon toga se unose 4 broja (zadata u dve linije) koji su upisani u polja.

Izlaz

Na standardni izlaz ispisati da ako je tabela popunjena ispravno, tj. ne ako nije.

Primer 1

Ulaz

14 8
16 6
9 7
5 1

Izlaz

da

Primer 2

Ulaz

11 9
17 3
9 8
3 1

Izlaz

ne
ZADATAK 03 2022/2023.

Spisak proizvoda

1. krug kvalifikacija 6. razred

Izvor zadatka: takprog.petlja.org — originalna zbirka zadataka

Potrebno predznanje: Podaci u C++ Operatori u C++ Grananje u programu Petlje

Postavka zadatka

Ljilja je svaki dan škole kupovala za užinu jabuku, kiflu ili lizalicu. Ako je poznato kolika je cena svakog proizvoda i ako je poznat spisak proizvoda koje je ona kupila tokom nekoliko dana, odrediti koliko je ukupno novca potrošila.

Oznake proizvoda
  • j — jabuka
  • k — kifla
  • l — lizalica
Svaki znak u niskoj predstavlja jedan kupljeni proizvod.

Ulaz

Sa standardnog ulaza učitavaju se cena jabuke, kifle i lizalice (tri prirodna broja između 10 i 100, svaki u posebnom redu). Nakon toga se učitava niska sastavljena od znakova j, k i l, dužine najviše 30 karaktera, koja određuje redom proizvode koje je Ljilja kupila.

Izlaz

Na standardni izlaz ispisati ukupnu količinu utrošenog novca.

Primer 1

Ulaz

32
30
45
jjkllkl

Izlaz

259

Primer 2

Ulaz

10
20
30
jkl

Izlaz

60

Razumevanje i rešavanje zadatka

U ovom zadatku vežbamo rad sa niskom (stringom), prolazak kroz njene znakove pomoću petlje i korišćenje grananja da bismo odredili cenu svakog kupljenog proizvoda.

Zato je dovoljno da prolazimo kroz spisak proizvoda jedan po jedan znak. Kada naiđemo na j, ukupnoj sumi dodajemo cenu jabuke. Kada naiđemo na k, dodajemo cenu kifle, a za l dodajemo cenu lizalice.

Ključna ideja: ne moramo da obrađujemo svaki proizvod posebno. Petljom prolazimo kroz nisku i na osnovu njenog trenutnog znaka prepoznajemo šta je kupljeno.

Primer obračuna

Za spisak:

jjkllkl
potrebno je sabrati:
cena jabuke + cena jabuke + cena kifle
+ cena lizalice + cena lizalice
+ cena kifle + cena lizalice

Za cene 32, 30 i 45 dobijamo:

32 + 32 + 30 + 45 + 45 + 30 + 45 = 259

Pošto spisak ima najviše 30 znakova, jednostavan prolazak kroz celu nisku je sasvim dovoljan.

ZADATAK 04 2022/2023.

Majstor

1. krug kvalifikacija 6. razred

Izvor zadatka: Originalna zbirka zadataka na Petlji

Potrebno predznanje: Podaci u C++ Operatori u C++ Grananje u programu Petlje

Postavka zadatka

Nakon izvođenja radova majstoru Peri je vraćeno n kutija sa šrafovima. Kutije su korišćene i mogu sadržati različite brojeve šrafova.

Majstor Pera hoće da koristi dve kutije sa najmanjim brojem šrafova. Pomozite majstoru Peri da izračuna koliko ukupno šrafova ima u tako izabrane dve kutije.

Ulaz

U prvoj liniji standardnog ulaza unosi se ukupan broj kutija n (2 ≤ n ≤ 30). Zatim se u narednih n linija unose brojevi šrafova u kutijama ki (1 ≤ ki ≤ 100), redom.

Izlaz

Na standardni izlaz ispisati ceo broj koji predstavlja zbir šrafova u dve kutije sa najmanje šrafova.

Primer 1

Ulaz

5
45
32
9
15
67

Izlaz

24

Primer 2

Ulaz

7
764
455
721
231
138
97
333

Izlaz

235

Primer 3

Ulaz

5
28
14
30
15
14

Izlaz

28
Uputstvo za rešavanje

Zadatak se može rešiti primenom petlji i grananja u programu, ali i pomoću vektora.

Za pristup sa vektorom potrebno je poznavanje oblasti: Dinamički niz — vector.

U vektor treba učitati broj šrafova iz svake kutije, a zatim ga sortirati po rastućem redosledu pomoću funkcije sort iz zaglavlja <algorithm>. Prve dve vrednosti tada predstavljaju najmanje brojeve šrafova.

Otvori rešenje
ZADATAK 05 2022/2023.

Zrak

1. krug kvalifikacija 6. i 7. razred

Izvor zadatka: Originalni link iz postojeće stranice — Petlja

Postavka zadatka

Poznato je da radio-talasima smetaju prepreke koje im se nađu na putu. Potrebno je istražiti da li radiotalasi mogu da prođu kroz pravougaonu oblast u kojoj je zasađeno drveće.

Radio-talas se ispušta iz gornjeg levog ugla te oblasti i to u pravcu koji je određen vertikalnim i horizontalnim pomerajem. To su brojevi koji određuju razliku između koordinata narednog i tekućeg polja koje je zrak dostigao.

Na primer, ako su pomeraji redom 2 i 1, to znači da se zrak u svakom koraku pomeri dve vrste naniže i jednu kolonu nadesno, pa redom prelazi polja čije su koordinate (v, k) jednake (0, 0), (2, 1), (4, 2) itd.

Napiši program koji određuje koliko stabala će se naći na putu radio-talasa.

Ulaz

Prva linija standardnog ulaza sadrži dimenzije matrice bv i bk (3 ≤ bv, bk ≤ 100), razdvojene razmakom. Nakon toga se nalazi opis matrice, pri čemu su polja koja sadrže stabla označena sa 1, a polja koja ne sadrže stabla sa 0. Na kraju se nalazi linija u kojoj su dati pomeraji (prirodni brojevi razdvojeni razmakom).

Izlaz

Na standardni izlaz ispisati broj stabala koje radio-signal poseti.

Primer 1

Ulaz

8 8
0 1 1 0 0 1 0 1
0 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0
1 1 0 1 0 1 0 1
0 1 1 0 1 1 1 0
0 0 0 0 0 1 0 1
1 0 1 1 0 1 1 0
0 1 1 0 1 1 1 0
2 1

Izlaz

2
Objašnjenje

Na slici su polja kroz koja prolazi zrak označena simbolima - ako na njima nema stabla i X ako se na njima nalazi stablo.

Za pomeraje 2 i 1 zrak posećuje položaje (0, 0), (2, 1), (4, 2) i (6, 3). Dva od tih polja sadrže stabla.

- 1 1 0 0 1 0 1
0 0 1 0 1 0 1 0
1 - 1 0 1 0 1 0
1 1 0 1 0 1 0 1
0 1 X 0 1 1 1 0
0 0 0 0 0 1 0 1
1 0 1 X 0 1 1 0
0 1 1 0 1 1 1 0

Primer 2

Ulaz

8 8
1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
1 2

Izlaz

2
Uputstvo za rešavanje

Za učitavanje matrice koristiti ugnježdene petlje.

Početi od pozicije (0, 0). Koristeći petlju i proveru da li se nalazimo unutar matrice, prelaziti na nove pozicije prema unetim vrednostima pomeraja po redu i koloni.

Ako je na posećenoj poziciji vrednost u matrici jednaka 1, povećati brojač za 1. Po izlasku iz petlje brojač predstavlja broj posećenih polja na kojima se nalazi stablo.

Otvori rešenje
ZADATAK 06 2022/2023.

Broj dana odmerenog treninga

1. krug kvalifikacija 7. razred

Izvor zadatka: Originalna zbirka zadataka na Petlji

Potrebno predznanje: Podaci u C++ Operatori u C++ Grananje u programu Petlje

Postavka zadatka

Prilikom pripreme za predstojeća takmičenja, sportista svakog dana meri rezultat koji je postigao. Pošto želi da ravnomerno podiže formu, želi da svaki dan rezultat bude sve bolji (veći broj predstavlja bolji rezultat).

Za neki dan treninga ćemo reći da je dobar ako je rezultat postignut tog dana strogo bolji nego prethodnog, a strogo lošiji nego narednog. Da bi bio dobar, za prvi dan je dovoljno da je strogo lošiji od narednog, a za poslednji dan da je strogo bolji od prethodnog.

Napiši program koji izračunava broj dobrih dana.

Ulaz

Sa standardnog ulaza učitava se broj dana n (3 ≤ n ≤ 100) tokom kojih je sportista trenirao, a u drugom redu rezultati koje je sportista postizao tokom svakog od tih n dana.

Izlaz

Na standardni izlaz ispisati broj dobrih dana.

Primer 1

Ulaz

6
100 120 130 110 140 150

Izlaz

4

Primer 2

Ulaz

6
10 20 30 40 50 60

Izlaz

6
ZADATAK 07 2022/2023.

Kuvar

1. krug kvalifikacija 8. razred

Izvor zadatka: Originalna zbirka zadataka na Petlji

Potrebno predznanje: Podaci u C++ Operatori u C++

Postavka zadatka

Kuvaru je za jednu porciju potrebno m grama mesa za glavno jelo, a za salatu ili k grama kupusa ili c grama cvekle.

Na raspolaganju su M grama mesa, K grama kupusa i C grama cvekle (a svih ostalih sastojaka ima mnogo više).

Napisati program koji učitava potrebne količine za jednu porciju m, k, c, a zatim i raspoložive količine M, K, C, i ispisuje za koliko celih porcija (glavno jelo i salata) kuvar ima dovoljno sastojaka.

Ulaz

Na standardnom ulazu su redom brojevi m, k, c, M, K, C, svaki u posebnom redu. Svi brojevi su celi, pozitivni i manji od 50000.

Izlaz

Na standardni izlaz ispisati samo jedan ceo nenegativan broj, a to je broj celih porcija koje mogu da se pripreme.

Primer 1

Ulaz

200
250
150
2200
1400
890

Izlaz

10

Primer 2

Ulaz

150
200
100
6100
5100
1000

Izlaz

35
Napomena

U originalnom tekstu, oznake za raspoložive količine nisu bile potpuno navedene u rečenici. Ovde su zapisane kao M, K i C, prema redosledu brojeva u ulazu.

Otvori rešenje
ZADATAK 08 2022/2023.

Stubići od kockica

1. krug kvalifikacija 8. razred

Izvor zadatka: Originalna zbirka zadataka na Petlji

Potrebno predznanje: Podaci u C++ Operatori u C++ Grananje u programu

Postavka zadatka

Dva druga se igraju kockicama. Od prethodne igre ostala su im dva stuba čije su visine A i B. Sada, za novu građevinu, imaju dve ideje.

Po prvoj ideji potrebni su im stubovi visina A1 i B1, a po drugoj stubovi visina A2 i B2.

Da bi promenio visinu nekog stuba za 1, jednom drugaru potrebno je Tx vremena, a drugom Ty vremena. Za koliko najmanje vremena drugari mogu da preprave (produže ili skrate) postojeće stubove i naprave od njih stubove koji se uklapaju u jednu od ideja, ako svaki od njih prepravlja po jedan stub?

Vreme se meri od trenutka kada drugari istovremeno počnu sa prepravkama do trenutka kada su obojica završila.

Ulaz

U četiri reda standardnog ulaza nalaze se po dva prirodna broja razdvojena razmakom:

  • u prvom redu su A i B;
  • u drugom redu su A1 i B1;
  • u trećem redu su A2 i B2;
  • u četvrtom redu su Tx i Ty.

Veličine A, B, A1, B1, A2 i B2 pripadaju intervalu [1, 1000000], a Tx i Ty intervalu [1, 100].

Izlaz

Na standardni izlaz ispisati jedan prirodan broj — traženo najmanje vreme.

Primer 1

Ulaz

10 20
18 28
21 31
1 10

Izlaz

20

Primer 2

Ulaz

7 4
9 13
14 12
3 2

Izlaz

15
ZADATAK 09 2022/2023.

Slovarica

1. krug kvalifikacija 7. razred

Izvor zadatka: Originalna zbirka zadataka na Petlji

Postavka zadatka

Ana uči da sastavlja reči od slova. Danas želi da od slova koja ima na raspolaganju sastavi što više primeraka reči koju je smislila.

Napisati program koji određuje koliko puta data reč može da se sastavi od slova date kolekcije.

Ulaz

U prvom redu standardnog ulaza nalazi se niska karaktera koja predstavlja kolekciju, a u drugom niska koja predstavlja reč. Obe niske sastoje se isključivo od malih slova engleske abecede, a njihova dužina je najviše 50000 karaktera.

Izlaz

Na standardni izlaz ispisati jedan ceo broj — broj mogućih sastavljanja date reči.

Primer 1

Ulaz

matematikaiprogramiranje
meta

Izlaz

2

Primer 2

Ulaz

nekavelikakolekcijaslova
kea

Izlaz

3

Primer 3

Ulaz

babanedanijevisesedapajenekogleda
deda
Provera nedostajućeg podatka

U dostavljenom HTML-u nije naveden izlaz za ovaj primer. Potrebno je proveriti originalni zadatak pre objavljivanja kompletnog primera.

Uputstvo i rešenje

Otvori rešenje
ZADATAK 10 2022/2023.

Pas Ćuki

1. krug kvalifikacija 7. razred

Izvor zadatka: Originalna zbirka zadataka na Petlji

Postavka zadatka

Pas Ćuki je najpametniji pas na svetu. Pored toga što ume da napravi razne akrobatske trikove, on je i izvrstan programer, pa je izmislio novi programski jezik koji je nazvao Ć++.

Svaka linija programskog koda u jeziku Ć++ sastoji se od tačno m celih brojeva razdvojenih razmacima. Pošto je Ć++ veoma napredan jezik, potrebno ga je prevesti tako da bude razumljiv današnjim računarima.

U procesu prevođenja je u jednom trenutku potrebno da se svaka linija koda transformiše tako da sadrži m istih celih brojeva. Linija se transformiše tako što se svaki broj povećava ili smanjuje za 1 dok se ne dođe do željenog broja, a cena transformacije jednog broja u drugi jednaka je broju povećavanja ili smanjivanja.

Primer transformacije

Recimo da želimo da transformišemo liniju 1 4 9 u 3 3 3.

  • Broj 1 treba povećati dva puta da bi se dobio broj 3, pa je cena transformacije 2.
  • Broj 4 treba smanjiti jednom, pa je cena 1.
  • Broj 9 treba smanjiti šest puta, pa je cena 6.

Ukupna cena transformacije linije je 2 + 1 + 6 = 9.

Kako bi se uštedeli resursi pri prevođenju, potrebno je transformisati kod tako da ukupna cena transformacije bude što manja. Za jednu učitanu liniju potrebno je odrediti u koji će se broj transformisati da bi cena transformacije bila najmanja moguća.

Ako je liniju moguće transformisati u više različitih brojeva tako da cena ostane ista, bira se najveći takav broj.

Ulaz

U prvom redu standardnog ulaza nalazi se prirodan broj m (1 ≤ m ≤ 105) koji označava koliko brojeva se nalazi u liniji koja se učitava.

U narednom redu nalazi se niz od m celih brojeva (između −1000 i 1000) razdvojenih razmacima, koji predstavljaju jednu liniju u Ć++-u.

Dodatna ograničenja

U test primerima vrednim 49 poena dodatno važi m ≤ 100.

Izlaz

U prvom redu standardnog izlaza ispisati jedan broj koji označava u koji će se broj transformisati brojevi u datoj liniji. U drugom redu standardnog izlaza ispisati najmanju cenu transformacije date linije programskog koda.

Primer 1

Ulaz

6
1 8 6 -4 0 7

Izlaz

6
24
Objašnjenje

Najmanja cena transformacije postiže se ako se svi brojevi transformišu u broj 6.

Cena transformacije linije je:

|1 - 6| + |8 - 6| + |6 - 6|
+ |-4 - 6| + |0 - 6| + |7 - 6| = 24

Ista cena dobila bi se i kada bi se linija transformisala u broj 1. Pošto je 6 veći broj, prema uslovu zadatka biramo 6.

Primer 2

Ulaz

7
-5 -4 -3 -2 -1 0 1

Izlaz

-2
12

Uputstvo za rešavanje

ZADATAK 11 2022/2023.

Datum sa najvećom zaradom

1. krug kvalifikacija 8. razred

Izvor zadatka: Originalna zbirka zadataka na Petlji

Postavka zadatka

Poznati su svi fiskalni računi koje je izdala jedna knjižara. Sa svakog računa može se pročitati datum kada je račun izdat i iznos koji je naplaćen.

Napiši program koji određuje najveći ukupan iznos koji je knjižara naplatila u jednom danu, odnosno maksimalni dnevni pazar, kao i datum kada je taj iznos bio najveći.

Ako postoji više takvih datuma, ispisati ih sve, uređene hronološki od najstarijeg do najnovijeg.

Ulaz

Sa standardnog ulaza učitava se broj izdatih računa n (1 ≤ n ≤ 105), a zatim podaci o svakom računu u obliku:

dd-mm-gggg iznos

Iznos je realan broj zaokružen na dve decimale.

Izlaz

Na standardni izlaz ispisati maksimalni iznos, kao realan broj zaokružen na dve decimale, a zatim u narednim redovima datume kada je taj maksimalni iznos naplaćen.

Ako ima više datuma, oni treba da budu ispisani redom od najstarijeg do najnovijeg.

Primer

Ulaz

5
03-07-2021 340.00
05-04-2021 285.50
03-07-2021 100.50
04-07-2021 270.00
05-04-2021 155.00

Izlaz

440.50
05-04-2021
03-07-2021
Objašnjenje primera

Za datum 03-07-2021 ukupan pazar iznosi 340,00 + 100,50 = 440,50.

Za datum 05-04-2021 ukupan pazar iznosi 285,50 + 155,00 = 440,50.

To je najveći dnevni pazar. Pošto su oba datuma ostvarila isti iznos, ispisuju se oba, hronološki: prvo 05-04-2021, a zatim 03-07-2021.

Ideja za rešavanje

Potrebno je sabrati iznose svih računa koji imaju isti datum. Zatim među ukupnim dnevnim iznosima pronaći najveći i izdvojiti sve datume koji imaju baš taj iznos.

Za grupisanje se može koristiti mapa (map), u kojoj je datum ključ, a vrednost zbir iznosa za taj dan.

Posebno treba voditi računa o hronološkom redosledu: tekstualni datumi oblika dd-mm-gggg ne mogu se pravilno hronološki poređati običnim leksikografskim sortiranjem.

Dodatno uputstvo

Otvori rešenje
ZADATAK 12 2022/2023.

Zbirovi nakon podele

1. krug kvalifikacija Nizovi i parnost

Izvor zadatka: Originalna zbirka zadataka na Petlji

Postavka zadatka

Dat je niz celih brojeva dužine n. Niz je potrebno preseći na dva dela.

Nakon sečenja određuje se koliko postoji parova brojeva takvih da je jedan broj iz levog, a drugi iz desnog dela i da je njihov zbir paran broj.

Odrediti maksimalan broj takvih parova koji je moguće dobiti sečenjem niza.

Ulaz

Sa standardnog ulaza unosi se ceo broj n (2 ≤ n ≤ 50000). Zatim se u narednom redu unose elementi niza a[i] (0 ≤ a[i] ≤ 100), razdvojeni razmakom.

Izlaz

Na standardni izlaz ispisati jedan ceo broj koji predstavlja traženu maksimalnu vrednost.

Primer 1

Ulaz

8
1 7 3 4 6 5 8 0

Izlaz

7
Objašnjenje

Najveći broj parova dobija se podelom niza na delove:

Levi deo:  1 7 3 4 6
Desni deo: 5 8 0

Parovi čiji je zbir paran su:

(1,5), (7,5), (3,5),
(4,8), (4,0), (6,8), (6,0)

Ukupno postoji 7 parova.

Primer 2

Ulaz

7
1 9 3 11 12 4 8

Izlaz

4
Objašnjenje

Jedna optimalna podela je:

Levi deo:  1 9
Desni deo: 3 11 12 4 8

Svi brojevi u levom delu su neparni. U desnom delu postoje dva neparna broja, 3 i 11, pa svaki od njih može da formira paran zbir sa oba broja iz levog dela.

Dobijamo 2 × 2 = 4 para.

Ideja za rešavanje

Zbir dva broja je paran ako su oba parna ili su oba neparna. Zato nije potrebno proveravati svaki mogući par brojeva. Dovoljno je brojati parne i neparne elemente sa leve i desne strane preseka.

Za konkretnu podelu broj odgovarajućih parova jednak je:

parni_levo * parni_desno
+ neparni_levo * neparni_desno

Presek se pomera kroz niz, a brojači parnih i neparnih elemenata ažuriraju se prilikom prelaska svakog elementa sa desne na levu stranu.

Dodatno uputstvo

Otvori rešenje
ZADATAK 13 2022/2023.

Mešalica

3. krug kvalifikacija Permutacije

Izvor zadatka: Originalna zbirka zadataka na Petlji

Postavka zadatka

Na raspolaganju nam je mešalica koja može da meša redosled elemenata niza. Mešalica elemente uvek meša na isti način.

Neka je dat niz koji se dobija mešanjem niza 0 1 2 ... n-1. Napiši program koji određuje niz koji se dobija mešanjem niza 0 1 2 ... n-1 ukupno m puta.

Ulaz

Sa standardnog ulaza unose se prirodni brojevi n (1 ≤ n ≤ 50000) i m (0 ≤ m ≤ 1018), razdvojeni razmakom.

U narednom redu unosi se n različitih brojeva između 0 i n−1, razdvojenih razmakom, koji predstavljaju elemente niza 0 1 2 ... n-1 nakon jednog mešanja.

Izlaz

Na standardni izlaz ispisati n različitih brojeva između 0 i n−1, razdvojenih razmakom, koji predstavljaju elemente početnog niza nakon m mešanja.

Primer 1

Ulaz

4 2
0 2 3 1

Izlaz

0 3 1 2
Objašnjenje

Početni niz je:

0 1 2 3

Prvim mešanjem dobija se:

0 2 3 1

Drugim mešanjem dobija se:

0 3 1 2

Primer 2

Ulaz

5 3
1 2 0 4 3

Izlaz

0 1 2 4 3
Objašnjenje

Početni niz je:

0 1 2 3 4

Posle prvog mešanja:

1 2 0 4 3

Posle drugog mešanja:

2 0 1 3 4

Posle trećeg mešanja:

0 1 2 4 3

Primer 3

Ulaz

4 3
1 0 3 2

Izlaz

1 0 3 2
Objašnjenje

Početni niz je:

0 1 2 3

Prvim mešanjem dobija se:

1 0 3 2

Drugim mešanjem dobija se početni niz:

0 1 2 3

Trećim mešanjem dobija se:

1 0 3 2
Ideja za rešavanje

Kada bismo ponavljali mešanje jedno po jedno, za veoma veliko m algoritam bi bio prespor. Potrebno je iskoristiti činjenicu da mešalica uvek primenjuje istu permutaciju.

Jedna mogućnost je da se permutacija razloži na cikluse. U svakom ciklusu elementi se posle određenog broja mešanja vraćaju na svoje početne pozicije.

Za ciklus dužine k dovoljno je izračunati m % k. Tako se izbegava ponavljanje svih m mešanja i dobija efikasno rešenje i kada je m veoma veliko.

Dodatno uputstvo i video

Otvori rešenje

Video objašnjenje

ZADATAK 14 2022/2023.

Katanac

2. krug kvalifikacija 7. razred

Izvor zadatka: Originalna zbirka zadataka na Petlji

Potrebno predznanje: Podaci u C++ Operatori u C++ Grananje u programu Petlje

Postavka zadatka

Katanac za bicikl ima šifru koja se sastoji od četiri cifre. Svaka cifra se postavlja tako što se prsten na kome je ispisano svih deset cifara može vrteti u krug.

Napiši program koji za unetu ispravnu šifru i trenutno namešten kod na katancu određuje najmanji broj okretanja prstenova potrebnih da bi se katanac otključao.

Ulaz

Sa standardnog ulaza učitava se četvorocifrena ispravna šifra, a zatim četvorocifreni broj koji predstavlja početnu poziciju prstenova na katancu. Oba broja mogu počinjati nulama.

Izlaz

Na standardni izlaz ispisati najmanji ukupan broj okretanja prstenova.

Primer 1

Ulaz

1234
7249

Izlaz

10
Objašnjenje
  • Prsten sa cifrom 7 okreće se četiri puta unapred da bi se dobila cifra 1.
  • Prsten sa cifrom 2 ne mora da se okreće.
  • Prsten sa cifrom 4 okreće se jednom unazad da bi se dobila cifra 3.
  • Prsten sa cifrom 9 okreće se pet puta da bi se dobila cifra 4, bilo unapred bilo unazad.

Ukupno je potrebno 4 + 0 + 1 + 5 = 10 okretanja.

Primer 2

Ulaz

4812
0319

Izlaz

12
Ideja za rešavanje

Posmatraj svaku od četiri cifre zasebno. Prsten može da se okreće u dva smera, pa treba izabrati kraći put od trenutne cifre do odgovarajuće cifre šifre.

Ako je razlika dve cifre d, gde je d apsolutna razlika njihovih vrednosti, potrebno je:

min(d, 10 - d)

Zatim se saberu minimalna okretanja za sve četiri pozicije. Važno je sačuvati početne nule, zato šifre treba čitati kao stringove, a ne kao obične cele brojeve.

Dodatno uputstvo

ZADATAK 15 2022/2023.

Tačan izraz

2. krug kvalifikacija 8. razred

Izvor zadatka: Originalna zbirka zadataka na Petlji

Postavka zadatka

U izrazu a_b_c=d umesto donjih crta treba ubaciti dve računske operacije tako da izraz bude tačan.

Računske operacije koje se mogu koristiti su sabiranje (+), oduzimanje (-), množenje (*) i celobrojno deljenje (/). Važe standardni prioriteti računskih operacija.

Ulaz

U svakom od četiri reda standardnog ulaza unosi se po jedan ceo broj: redom a, b, c i d. Svi brojevi su u opsegu [1, 1000].

Izlaz

Na standardni izlaz ispisati sva moguća rešenja, u proizvoljnom redosledu, svako u posebnom redu. Jedno rešenje sastoji se od dva znaka razdvojena razmakom, koji predstavljaju računske operacije koje tim redom treba ubaciti.

Ukoliko nije moguće postići tačan izraz, ispisati nemoguce.

Primer 1

Ulaz

2
3
4
2

Izlaz

* -
+ /
- /
Objašnjenje

Rešenje * - je tačno jer važi:

2 * 3 - 4 = 2

Rešenje + / je takođe tačno:

2 + 3 / 4 = 2

Ovde je 3 / 4 celobrojno deljenje, pa je njegov rezultat 0. Deljenje ima veći prioritet od sabiranja.

Isto tako, važi:

2 - 3 / 4 = 2

Primer 2

Ulaz

8
3
2
12

Izlaz

* /

Primer 3

Ulaz

2
2
9
3

Izlaz

nemoguce

Primer 4

Ulaz

2
2
7
4

Izlaz

nemoguce
Ideja za rešavanje

Za svako od dva prazna mesta postoje četiri mogućnosti: +, -, * i /. Ukupno zato postoji samo 4 × 4 = 16 kombinacija.

Umesto da pokušavamo da matematički izvedemo operacije, možemo da isprobamo svih 16 parova i proverimo da li izraz daje vrednost d.

Važno je da se izraz izračuna uz standardni prioritet operacija: množenje i deljenje imaju prednost u odnosu na sabiranje i oduzimanje. Operator / predstavlja celobrojno deljenje.

Dodatno uputstvo

Otvori rešenje
ZADATAK 17 2022/2023.

Šljive

2. krug kvalifikacija 6. razred

Izvor zadatka: takprog.petlja.org — originalna zbirka zadataka

Potrebno predznanje: Podaci u C++ Operatori u C++ Grananje u programu Petlje

Postavka zadatka

Janko i Nataša su jeli šljive. Iz činije su uzimali istovremeno: Janko po dve, a Nataša po tri šljive, sve dok je to bilo moguće, odnosno dok nije ostalo manje od pet šljiva. Preostale šljive, ako ih je bilo, pojeo je kasnije Marko.

Napisati program koji učitava početni broj šljiva, a zatim ispisuje koliko je šljiva pojeo svako od njih, kao i broj osoba koje su pojele bar jednu šljivu.

Važno: Janko i Nataša uzimaju šljive sve dok u činiji ima najmanje pet šljiva. U svakom takvom krugu Janko pojede dve, a Nataša tri. Tek kada ostane manje od pet šljiva, preostali deo pojede Marko.

Ulaz

Na standardnom ulazu nalazi se jedan ceo nenegativan broj manji od 51, koji predstavlja početni broj šljiva.

Izlaz

Na standardni izlaz ispisati četiri cela broja, svaki u posebnom redu. Prva tri broja predstavljaju broj šljiva koje su pojeli Janko, Nataša i Marko, tim redom. Četvrti broj predstavlja broj osoba koje su pojele bar jednu šljivu.

Primer 1

Ulaz

14

Izlaz

4
6
4
3

Primer 2

Ulaz

3

Izlaz

0
0
3
1

Razumevanje i rešavanje zadatka

U ovom zadatku vežbamo korišćenje petlje while, promenljivih i uslova. Potrebno je pratiti koliko šljiva je ostalo i koliko su ih pojeli Janko i Nataša.

U jednom krugu Janko pojede dve šljive, a Nataša tri. Zajedno, dakle, pojedu pet šljiva. Zato petlja treba da se izvršava dok je broj preostalih šljiva veći ili jednak pet.

Ključna ideja: U svakom prolasku kroz petlju Jankov broj povećavamo za 2, Natašin za 3, a broj šljiva koje su ostale u činiji smanjujemo za 5. Kada se petlja završi, ono što je ostalo pripada Marku.

Primer obračuna

Ako na početku imamo 14 šljiva, Janko i Nataša mogu da uzmu po dve, odnosno tri šljive, ukupno dva puta:

14 - 5 = 9
9 - 5 = 4

Janko je pojeo 4 šljive, Nataša 6, a Marko preostale 4 šljive. Pošto su sve tri osobe pojele bar jednu šljivu, poslednji rezultat je 3.

ZADATAK 18 2022/2023.

Flaše

2. krug kvalifikacija 6. razred

Izvor zadatka: takprog.petlja.org — originalna zbirka zadataka

Potrebno predznanje: Podaci u C++ Operatori u C++ Petlje

Postavka zadatka

Ranko pretače različite vrste tečnosti iz \(n\) punih kanistera različitih zapremina u flaše zapremine \(v\) litara. Za svaki kanister treba odrediti koliko se flaša može potpuno napuniti tečnošću iz tog kanistera i koliko tečnosti će ostati nakon punjenja.

Tečnosti iz različitih kanistera ne smeju se međusobno mešati.

Važno: Svaki kanister se obrađuje zasebno. Ne prenosi se ostatak iz jednog kanistera u drugi, čak ni kada je u pitanju ista vrsta tečnosti.

Ulaz

U prvom redu standardnog ulaza nalaze se dva cela broja: \(n\), broj kanistera, i \(v\), zapremina jedne flaše u litrima. U narednih \(n\) redova nalazi se po jedan ceo broj koji predstavlja zapreminu odgovarajućeg kanistera u litrima. Svi brojevi su celi i između 1 i 10000.

Izlaz

U \(n\) redova ispisati po dva cela broja. Prvi broj predstavlja broj potpuno napunjenih flaša iz odgovarajućeg kanistera, a drugi broj broj litara koji ostaje nakon punjenja flaša.

Primer

Ulaz

7 6
24
13
6
10
17
23
40

Izlaz

4 0
2 1
1 0
1 4
2 5
3 5
6 4

Objašnjenje

Prvi kanister sadrži 24 litra. Pošto jedna flaša prima 6 litara, mogu se napuniti četiri flaše i ne ostaje tečnosti. Drugi kanister sadrži 13 litara, pa se mogu napuniti dve flaše i ostaje jedan litar. Ostali kanisteri obrađuju se na isti način.

Razumevanje i rešavanje zadatka

Ovaj zadatak vežba celobrojno deljenje i računanje ostatka pri deljenju. Nisu nam potrebne složene petlje za punjenje svake flaše pojedinačno — količnik i ostatak mogu se izračunati direktno.

Ako kanister sadrži \(k\) litara tečnosti, a jedna flaša ima zapreminu \(v\) litara, broj potpuno napunjenih flaša dobija se celobrojnim deljenjem \(k / v\), dok se preostala količina dobija operatorom \(k \% v\).

Ključna ideja: Operator / daje celobrojni količnik, a operator % daje ostatak pri deljenju. Za svaki kanister dovoljno je izračunati te dve vrednosti i ispisati ih.

Primer računanja

Ako kanister sadrži 17 litara, a zapremina flaše je 6 litara, računamo:

17 / 6 = 2
17 % 6 = 5

Mogu se potpuno napuniti dve flaše, a pet litara tečnosti ostaje u kanisteru.

ZADATAK 19 2022/2023.

Fudbalska grupa – tabela

2. krug kvalifikacija 6. razred Nizovi Uslovi

Izvor zadatka: DMS – informatika osnovnih škola

Potrebno predznanje: Podaci u C++ Operatori u C++ Nizovi

Postavka zadatka

Na svetskom prvenstvu u fudbalu svaka grupa sastoji se od četiri ekipe koje igraju svaka sa svakom. U narednu fazu takmičenja plasiraju se dve najbolje plasirane ekipe.

Za svaku pobedu ekipa dobija 3 poena, a za nerešen rezultat svaka ekipa dobija po 1 poen. Napisati program koji na osnovu rezultata šest utakmica određuje broj poena svake ekipe i gol-razliku, odnosno razliku između broja datih i primljenih golova.

Važno: Pobeda donosi 3 poena, nerešen rezultat 1 poen svakoj ekipi, a poraz ne donosi poene. Gol-razlika može biti pozitivna, negativna ili jednaka nuli.

Ulaz

Rezultati utakmica unose se redom: AB, CD, AC, BD, AD, BC. Svaki rezultat sastoji se od dva broja razdvojena razmakom. Prvi broj predstavlja broj golova prve navedene ekipe, a drugi broj golova druge ekipe.

Izlaz

Ispisati broj poena i gol-razliku za ekipe A, B, C i D, tim redom. Za svaku ekipu ispisati po jedan red.

Primer 1

Ulaz

3 2
2 1
4 2
1 3
3 0
1 0

Izlaz

9 6
3 -2
3 -2
3 -2

Primer 2

Ulaz

0 0
2 0
6 2
1 1
3 0
1 0

Izlaz

7 7
5 1
3 -3
1 -5

Razumevanje i rešavanje zadatka

Potrebno je pratiti poene i gol-razliku za svaku od četiri ekipe. To možemo da uradimo pomoću dva niza: poeni i golRazlika. Svakom elementu niza odgovara jedna ekipa.

Gol-razlika se uvećava za broj postignutih golova i umanjuje za broj primljenih golova. Poeni se određuju poređenjem rezultata dve ekipe u svakoj utakmici.

Ključna ideja: Za rezultat a b, prva ekipa dobija gol-razliku a - b, a druga b - a. Zatim pobedniku dodajemo 3 poena ili, ako je rezultat nerešen, dodajemo po 1 poen obema ekipama.

Primer računanja gol-razlike

Ako ekipa postigne 2 gola, a primi 5, njena gol-razlika za tu utakmicu iznosi:

2 - 5 = -3

Na kraju se sabiraju gol-razlike iz svih utakmica u kojima je ekipa učestvovala.

ZADATAK 20 2022/2023.

Najviše odličnih

2. krug kvalifikacija 6. razred Nizovi Prebrojavanje

Izvor zadatka: takprog.petlja.org — originalna zbirka zadataka

Potrebno predznanje: Podaci u C++ Operatori u C++ Nizovi

Postavka zadatka

Napisati program koji za dati razred i uspeh svakog od \(n\) učenika ispisuje broj razreda u kome ima najviše odličnih učenika.

Učenik ima odličan uspeh ako je njegov uspeh veći ili jednak 4,5.

Važno: Ako više razreda ima isti najveći broj odličnih učenika, ispisuje se broj najvećeg razreda.

Ulaz

U prvom redu nalazi se ceo broj \(n\), gde je \(1 \leq n \leq 100\). U svakom od narednih \(n\) redova nalaze se prirodan i realan broj razdvojeni razmakom. Prirodan broj je iz intervala [1, 8] i predstavlja razred, a realan broj je iz intervala [1.0, 5.0] i predstavlja uspeh učenika. Uspeh veći ili jednak 4,5 smatra se odličnim.

Izlaz

Ispisati broj razreda koji ima najviše odličnih učenika. Ako više razreda ima isti najveći broj odličnih učenika, ispisati broj najvećeg takvog razreda.

Primer

Ulaz

6
4 3.58
4 4.67
5 4.83
6 4.5
4 4.93
6 5.0

Izlaz

6

Objašnjenje

U 4. razredu ima dva odlična učenika, u 5. razredu jedan, a u 6. razredu dva. Pošto 4. i 6. razred imaju isti najveći broj odličnih učenika, ispisuje se veći broj razreda: 6.

Razumevanje i rešavanje zadatka

Potrebno je prebrojati odlične učenike u svakom razredu. Za to koristimo niz odlicni, u kome odlicni[r] predstavlja broj odličnih učenika u razredu r.

Kada učitamo podatke o učeniku, proveravamo da li je njegov uspeh najmanje 4,5. Ako jeste, povećavamo brojač njegovog razreda. Nakon obrade svih učenika tražimo razred sa najvećim brojem odličnih učenika.

Ključna ideja: Razrede obilazimo od 8 ka 1. Odgovor menjamo samo kada pronađemo strogo veći broj odličnih učenika. Tako u slučaju izjednačenja ostaje izabran veći razred.

Primer prebrojavanja

Ako је učenik iz 6. razreda ostvario uspeh 4,5, on se računa kao odličan jer je njegov uspeh veći ili jednak 4,5.

if (uspeh >= 4.5) {
    odlicni[razred]++;
}
ZADATAK 21 Nizovi · Petlje

Doline

Nizovi Uzastopni elementi Uslovi
Potrebno predznanje: Nizovi Petlje Grananje u programu

Postavka zadatka

Dat je niz nadmorskih visina nekog terena. Dolina je deo terena sastavljen od jedne ili više uzastopnih jednakih visina, takav da su visina neposredno pre tog dela i visina neposredno posle njega strogo veće od visine dna doline.

Napisati program koji određuje koliko dolina postoji na datom terenu.

Važno: Više uzastopnih jednakih visina koje predstavljaju dno jedne doline računaju se kao jedna dolina. Dno mora imati susede sa obe strane, a obe susedne visine moraju biti strogo veće.

Ulaz

Sa standardnog ulaza unosi se broj delova terena \(n\), gde je \(1 \leq n \leq 150\). U narednom redu unosi se \(n\) celih brojeva razdvojenih razmakom, koji predstavljaju nadmorske visine terena. Sve visine su iz intervala [0, 100].

Izlaz

Ispisati jedan ceo broj koji predstavlja broj dolina.

Primer 1

Ulaz

8
5 3 3 7 4 4 4 8

Izlaz

2

Objašnjenje

U nizu postoje dve doline. Prvu čine visine 5 3 3 7, a drugu visine 7 4 4 4 8. Njihova dna su na visinama 3 i 4.

Primer 2

Ulaz

5
4 3 1 2 4

Izlaz

1

Objašnjenje

Jedina dolina je 3 1 2, čije je dno na visini 1.

Primer 3

Ulaz

11
2 2 3 4 4 2 2 2 5 4 5

Izlaz

2

Objašnjenje

Doline su 5 2 2 2 5 i 5 4 5. U oba slučaja dno je niže od susednih visina.

Razumevanje i rešavanje zadatka

Niz obilazimo sleva nadesno i posmatramo grupe uzastopnih jednakih visina. Svaka grupa predstavlja jedno moguće dno doline. Da bismo utvrdili da li je grupa zaista dolina, proveravamo visinu neposredno levo i neposredno desno od nje.

Ako grupa ima susede sa obe strane i obe susedne visine strogo su veće od visine grupe, broj dolina uvećavamo za jedan. Zatim nastavljamo obilazak od prvog elementa posle te grupe.

Ključna ideja: Najpre pronađi početak i kraj bloka jednakih visina. Zatim proveri da li su visine neposredno uz blok veće od visine dna. Na taj način jedan blok jednakih visina broji se samo jednom.

Primer prepoznavanja doline

U nizu 5 3 3 3 7, sva tri elementa visine 3 čine dno jedne doline. Visina levo od bloka je 5, a desno 7, pa su oba suseda viša od dna.

5 > 3
7 > 3
ZADATAK 22 2022/2023.

Dopuna mejlova

1. krug kvalifikacija 7. razred

Izvor zadatka: takprog.petlja.org — originalna zbirka zadataka

Postavka zadatka

Aplikacije za slanje mejlova čuvaju ranije korišćene mejl adrese i pomažu korisnicima tako što na osnovu njih automatski dopunjavaju započeti unos nove adrese.

Napisati program koji efikasno implementira ovu funkcionalnost: za svaki započeti unos određuje koliko sačuvanih mejl adresa počinje unetim tekstom.

Ulaz

Sa standardnog ulaza učitava se broj mejl adresa \(n\), gde je \(1 \leq n \leq 10^5\). U narednih \(n\) redova nalazi se po jedna mejl adresa. Nakon toga učitava se broj upita \(m\), gde je \(1 \leq m \leq 10^5\), a zatim i \(m\) upita. Svaki upit predstavlja započetu mejl adresu.

Izlaz

Za svaki upit ispisati broj sačuvanih mejl adresa koje počinju tim upitom. Svaki rezultat ispisati u posebnom redu.

Primer

Ulaz

9
pera@gmail.com
lidija.djokic@yahoo.com
andrija@yahoo.com
laza@gmail.com
ana.petrovic@mail.ru
lazica@hotmail.com
milica@gmail.com
larisa@zoho.com
anaconda@python.org
3
laz
milica@
a

Izlaz

2
1
3

Objašnjenje

Upit laz odgovara adresama laza@gmail.com i lazica@hotmail.com. Upit milica@ odgovara jednoj adresi, a slovom a počinju tri adrese.

Razumevanje i rešavanje zadatka

Kada ima mnogo adresa i upita, nije efikasno za svaki upit ponovo prolaziti kroz sve sačuvane mejlove. Umesto toga možemo koristiti prefiksno stablo, poznato kao trie.

Prilikom dodavanja adrese prolazimo kroz njene karaktere i povećavamo brojač svakog posećenog čvora. Kada stigne upit, pratimo odgovarajuće grane stabla. Brojač poslednjeg čvora predstavlja broj adresa koje počinju unetim tekstom.

Ključna ideja: Svaki čvor pamti koliko sačuvanih adresa prolazi kroz njega. Ako neki karakter upita nema odgovarajuću granu, nijedna adresa ne počinje tim upitom, pa je odgovor nula.

Primer rada sa prefiksom

Adrese laza@gmail.com i lazica@hotmail.com obe počinju tekstom laz. Brojač čvora koji predstavlja prefiks laz zato ima vrednost 2.

ZADATAK 23 2022/2023.

Note

1. krug kvalifikacija 8. razred

Izvor zadatka: takprog.petlja.org — originalna zbirka zadataka

Potrebno predznanje: Podaci u C++ Operatori u C++ Grananje Petlje Stringovi Nizovi

Postavka zadatka

Tonovi se u muzici ređaju po oktavama. U jednoj oktavi imamo sedam osnovnih tonova: C, D, E, F, G, A i H, kao i pet povišenih tonova koji se nalaze između pojedinih osnovnih tonova.

Dogovaramo se da sve međutonove zapisujemo kao povišene, pomoću oznake #. Redosled tonova je:

C, C#, D, D#, E, F, F#, G, G#, A, A#, H

Posle tona H ponovo dolazi C. Transponovanje melodije znači pomeranje svakog tona za određeni broj mesta unapred ili unazad u ovom cikličnom redosledu.

Napisati program koji transponuje unetu melodiju za zadati broj tonova.

Ulaz

U prvom redu nalazi se niska dužine najviše 1000 karaktera koja predstavlja melodiju. Tonovi su zapisani jedan za drugim, bez razmaka. Nakon toga unosi se ceo broj između -11 i 11 koji predstavlja broj mesta za transponovanje. Pozitivan broj označava pomeranje unapred, a negativan unazad.

Izlaz

Ispisati transponovanu melodiju, bez razmaka između tonova.

Primer 1

Ulaz

GDGHDCAF#D
5

Izlaz

CGCEGFDHG

Objašnjenje

Pomeranjem tona G za pet mesta dobija se C, jer se nakon H vraćamo na C. Na isti način D prelazi u G, a F# u H.

Primer 2

Ulaz

C#F#AG
-3

Izlaz

A#D#F#E

Razumevanje i rešavanje zadatka

Potrebno je svakom tonu dodeliti indeks u nizu od 12 tonova. Kada pronađemo indeks tona, dodamo mu broj mesta za transponovanje i dobijemo indeks novog tona.

Pošto se tonovi ponavljaju ciklično, indeks mora ostati u opsegu od 0 do 11. To postižemo ostatkom pri deljenju sa 12. Posebno treba voditi računa o negativnom pomeranju, jer u C++ ostatak negativnog broja može biti negativan.

Ključna ideja: Tonovi se čuvaju u nizu redosledom kojim se pojavljuju. Svaki ton prvo prepoznajemo u ulaznoj melodiji, a zatim njegov indeks pomeramo ciklično. Ton sa oznakom # predstavlja jedan ton, pa se njegovi karakteri obrađuju zajedno.

Primer pomeranja

Ako je indeks tona G jednak 7, a pomeraj je 5, novi indeks je:

(7 + 5) % 12 = 0

Indeks 0 odgovara tonu C, pa G transponovan pet mesta unapred postaje C.

ZADATAK 24 2022/2023.

Greška u tekstu

2. krug kvalifikacija 7. i 8. razred

Izvor zadatka: takprog.petlja.org — originalna zbirka zadataka

Potrebno predznanje: Podaci u C++ Operatori u C++ Grananje Petlje Stringovi Nizovi

Postavka zadatka

Poruka od četiri velika slova poslata je tri puta. Svaki put je, zbog smetnji tokom prenosa, tačno jedan karakter poruke pogrešno prenesen kao neko drugo veliko slovo.

Napisati program koji na osnovu tri primljene poruke rekonstruiše originalnu poruku. Rekonstruisana poruka ima četiri karaktera. Na pozicijama na kojima se originalno slovo može sa sigurnošću odrediti ispisuje se to slovo, a na ostalim pozicijama zvezdica (*).

Ulaz

U svakom od tri reda standardnog ulaza nalazi se po četiri velika slova engleske abecede.

Izlaz

U jednom redu ispisati četiri karaktera rekonstruisane poruke. Ako se originalni karakter na određenoj poziciji ne može jednoznačno odrediti, na toj poziciji ispisati zvezdicu.

Primer 1

Ulaz

AXCD
ABYD
ABCZ

Izlaz

ABCD

Primer 2

Ulaz

AXCD
AYCD
AZCD

Izlaz

A*CD

Razumevanje i rešavanje zadatka

Originalna poruka ima samo četiri slova, pa možemo da isprobamo sve moguće poruke sastavljene od velikih slova engleske abecede. Takvih poruka ima \(26^4 = 456976\).

Kandidat prihvatamo samo ako se od svake od tri primljene poruke razlikuje na tačno jednoj poziciji. Nakon što pronađemo sve kandidate koji ispunjavaju taj uslov, upoređujemo njihova slova po pozicijama.

Ključna ideja: Ako je slovo na određenoj poziciji isto u svim prihvaćenim kandidatima, to slovo možemo pouzdano da ispišemo. Ako se kandidati na toj poziciji razlikuju, ispisujemo zvezdicu.

Primer zaključivanja

U primeru 2, sve tri poruke počinju slovom A, a završavaju se sa CD. Drugo slovo je različito: X, Y i Z. Zato su prva, treća i četvrta pozicija poznate, dok se na drugoj ispisuje zvezdica.

ZADATAK 25 2022/23. · 8. razred

Broj trocifrenih parnih

Nizovi Cifre Brojanje

Napomena: Zadatak sa 2. kruga kvalifikacija, sezona 2022/23, za 8. razred. Preuzet sa takprog.petlja.org.

Potrebno predznanje: Podaci u C++, Operatori u C++, Grananje, Petlje i Nizovi.

Opciono: Dinamički niz – vector.

Napisati program koji za dati niz cifara ispisuje broj različitih trocifrenih parnih brojeva koji se mogu sastaviti od datih cifara.

Prilikom formiranja svakog broja, svaki element ulaznog niza može se upotrebiti najviše jednom. Brojevi sa istim ciframa na istim pozicijama računaju se samo jednom, čak i ako se do njih može doći izborom različitih elemenata niza.

Ulaz

U prvom redu nalazi se broj cifara N, gde je 3 ≤ N ≤ 50000. U drugom redu nalazi se N cifara razdvojenih razmacima. Svaka ulazna vrednost predstavlja cifru od 0 do 9.

Izlaz

Ispisati jedan ceo broj — broj različitih trocifrenih parnih brojeva koji se mogu sastaviti.

Primer 1
Ulaz
4
2 4 2 2
Izlaz
4

Mogući brojevi su 222, 224, 242 i 422.

Primer 2
Ulaz
3
0 1 0
Izlaz
1

Jedini mogući trocifreni paran broj je 100. Broj koji počinje nulom ne smatra se trocifrenim brojem.

Primer 3
Ulaz
3
4 1 2
Izlaz
4

Mogući brojevi su 124, 142, 214 i 412.

Ideja za rešavanje: Prebroj pojavljivanja svake cifre od 0 do 9. Zatim isprobaj sve kombinacije cifara stotina, desetica i jedinica. Cifra stotina ne sme biti nula, a cifra jedinica mora biti parna. Za svaku kombinaciju proveri da li u ulaznom nizu postoji dovoljan broj pojavljivanja svake cifre.
ZADATAK 26 2022/23. · 8. razred

Puž

Matrice Spiralno kretanje Stringovi

Napomena: Zadatak sa 2. kruga kvalifikacija, sezona 2022/23, za 8. razred. Preuzet sa takprog.petlja.org.

Potrebno predznanje: Podaci u C++, Operatori u C++, Grananje, Petlje, Stringovi i Nizovi.

Opciono: Dinamički niz – vector.

Nemanja ima šest godina i počeo je da uči da čita i piše. Od strica je dobio vežbanku za učenje slova sa vežbom koja se zove „Puž”. U vežbi je potrebno popuniti tabelu dimenzija n × m slovima zadate rečenice.

Popunjavanje počinje u gornjem levom uglu. Slova se upisuju nadesno do ivice tabele, zatim naniže, potom ulevo, pa nagore. Kada se dođe do granice popunjenog dela, nastavlja se istim kružnim postupkom kroz unutrašnjost tabele dok se sva polja ne popune.

U tabelu se upisuju samo slova; razmaci, znaci interpunkcije i ostali znakovi se ignorišu. Tabelu je popunio stric, a Nemanju zanima da li se u rečenici koja je korišćena za popunjavanje nalazi ime njegovog omiljenog superheroja.

Napisati program koji rekonstruiše nisku dobijenu čitanjem tabele po istoj spiralnoj putanji, a zatim u njoj traži ime superheroja.

Tabela sa slovima popunjenim spiralnim redosledom
Ulaz

U prvom redu nalaze se dva cela broja n i m, gde je 2 ≤ n, m ≤ 50. Oni predstavljaju broj redova i broj kolona tabele.

U narednih n redova nalazi se po m malih slova engleske abecede koja predstavljaju popunjenu tabelu. U poslednjem redu nalazi se ime superheroja koje tražimo — niska dužine najviše 30 znakova, sastavljena od malih slova engleske abecede.

Izlaz

Ispisati poziciju u rekonstruisanoj rečenici na kojoj počinje ime superheroja. Pozicije se broje od 1. Ako se ime ne pojavljuje, ispisati -1. Ako se pojavljuje više puta, ispisati poziciju njegovog prvog pojavljivanja.

Primer 1
Ulaz
4 5
mnogo
jdrmv
aaneo
psmil
spajdrmen
Izlaz
11

Čitanjem tabele spiralnim redosledom dobija se niska mnogovolimspajdrmena. Ime spajdrmen počinje na 11. poziciji.

Primer 2
Ulaz
5 5
dalis
rnuui
ccudt
oivoi
adelg
crnaudovica
Izlaz
-1

Rekonstruisana niska ne sadrži crnaudovica. Tražena niska se ne pojavljuje u tekstu.

Ideja za rešavanje: Čuvaj granice nepročitanog dela tabele: gornji red, donji red, levu kolonu i desnu kolonu. U svakoj iteraciji pročitaj gornji red sleva nadesno, desnu kolonu odozgo nadole, donji red zdesna nalevo i levu kolonu odozdo nagore. Proveri da se granice nisu preklopile, kako nijedno polje ne bi bilo pročitano dva puta. Na kraju upotrebi find da pronađeš ime superheroja.
ZADATAK 27 2022/23. · 8. razred

Najmanji dobitak

Nizovi Sortiranje Efikasnost

Napomena: Zadatak sa 2. kruga kvalifikacija, sezona 2022/23, za 8. razred. Preuzet sa takprog.petlja.org.

Potrebno predznanje: Podaci u C++, Operatori u C++, Grananje, Petlje, Nizovi i Sortiranje.

Zamislimo ogromnu matricu popunjenu nulama. Svakim potezom (aᵢ, bᵢ, cᵢ), svi elementi u prvih aᵢ redova i prvih bᵢ kolona matrice povećavaju se za cᵢ.

Potrebno je odrediti najmanju pozitivnu vrednost koja se nalazi u matrici nakon svih n poteza.

Ulaz

U prvom redu standardnog ulaza nalazi se broj poteza n (1 ≤ n ≤ 50000). U svakom od narednih n redova nalaze se po tri prirodna broja aᵢ, bᵢ i cᵢ, razdvojena razmacima. Vrednosti aᵢ i bᵢ nisu veće od milijardu, a zbir svih cᵢ ne prelazi dve milijarde.

Smatrati da matrica ima više od milijardu redova i više od milijardu kolona.

Izlaz

Ispisati jedan ceo broj — najmanju pozitivnu vrednost u matrici.

Primer 1
Ulaz
4
2 3 1
4 5 2
1 2 1
4 5 1
Izlaz
3

Nakon sva četiri poteza, matrica počinje ovako:

5 5 4 3 3 0 0 ...
4 4 4 3 3 0 0 ...
3 3 3 3 3 0 0 ...
3 3 3 3 3 0 0 ...
0 0 0 0 0 0 0 ...
...

Najmanja pozitivna vrednost u matrici je 3.

Primer 2
Ulaz
2
3 7 3
4 5 2
Izlaz
2

Nakon oba poteza, matrica počinje ovako:

5 5 5 5 5 3 3 0 0 ...
5 5 5 5 5 3 3 0 0 ...
5 5 5 5 5 3 3 0 0 ...
2 2 2 2 2 0 0 0 0 ...
0 0 0 0 0 0 0 0 0 ...
...

Najmanja pozitivna vrednost u matrici je 2.

Ideja za rešavanje: Potez (aᵢ, bᵢ, cᵢ) utiče na polja čiji su redni broj najviše aᵢ i broj kolone najviše bᵢ. Zato vrednost u polju (aᵢ, bᵢ) predstavlja zbir svih cⱼ za koje važi aⱼ ≥ aᵢ i bⱼ ≥ bᵢ. Dovoljno je izračunati takav zbir za svaki potez i uzeti najmanji. Sortiranjem po aᵢ i Fenwickovim stablom za zbirove po bᵢ, svi potrebni zbirovi mogu se izračunati za O(n log n).
ZADATAK 28 2022/23. · 7. razred

Seča drva

Matrice Prefiksni zbirovi Optimizacija

Napomena: Zadatak sa 3. kruga kvalifikacija, sezona 2022/23, za 7. razred. Preuzet sa takprog.petlja.org.

Potrebno predznanje: Podaci u C++, Operatori u C++, Grananje, Petlje i Nizovi.

Opciono: Dinamički niz – vector.

Ana i Biljana pripremaju drva za ogrev za zimu. Ana je nasekla komade drveta raznih oblika i istovarila ih na traku. Traka pomera drva ka testeri koja ih seče na dva dela. Testera se postavlja na jednu od dozvoljenih pozicija, a tokom sečenja ne može da se pomera.

Kada se sečenje završi, Ana uzima sve drvo koje je palo sa jedne strane testere, a Biljana sve sa druge. Žele da postave testeru tako da se količine drveta koje dobiju što manje razlikuju.

Mašina je zabeležila oblik svakog komada drveta matricom dimenzije k × k. Vrednost 1 označava deo na kome postoji drvo, a 0 prazno polje. Testera se može postaviti na pozicije 0, 1, 2, ..., k.

Napisati program koji za zadate oblike drveta određuje najmanju moguću apsolutnu razliku između količina drveta koje Ana i Biljana dobiju.

Primer oblika drveta za zadatak Seča drva
Primer oblika drveta
Ulaz

U prvom redu nalazi se prirodan broj n, broj komada drveta, gde je n ≤ 10⁷. U drugom redu nalazi se prirodan broj k, najveća dimenzija matrice, gde je k ≤ 10⁷.

Zatim se unosi n matrica dimenzije k × k. Svaka matrica sastoji se od k redova sa po k brojeva: 0 ako na tom mestu nema drveta ili 1 ako ga ima. U svim test primerima važi n · k · k ≤ 10⁷.

Izlaz

Ispisati najmanju moguću apsolutnu razliku između količina drveta koje Ana i Biljana dobiju.

Primer 1
Ulaz
4
4
1 1 0 0
1 1 0 0
1 1 0 0
1 1 0 0
0 0 1 0
1 1 1 0
1 1 1 0
1 1 1 0
0 1 0 0
1 1 0 0
1 1 0 0
0 0 0 0
0 0 0 0
1 1 1 0
1 0 1 0
0 0 0 0
Izlaz
0

Ovo je primer iz teksta zadatka.

Primer 2
Ulaz
4
3
1 1 1
1 0 1
0 0 0
1 0 1
1 0 1
1 1 0
0 0 0
0 1 1
0 0 1
0 0 0
1 1 0
1 1 0
Izlaz
8

Razlika 8 postiže se ako se testera postavi na poziciju 1 ili na poziciju 2.

Primer 3
Ulaz
3
5
1 0 0 0 0
1 1 0 0 1
0 0 0 0 1
0 0 0 0 1
0 0 0 0 0
0 1 1 0 1
0 1 0 0 0
0 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 1 1 1 0
0 0 0 0 0
0 0 1 1 0
0 0 1 1 1
0 0 0 1 0
Izlaz
2

Razlika 2 postiže se ako se testera postavi na poziciju 3.

Ideja za rešavanje: Nije potrebno čuvati sve matrice. Za svaki red matrice prebroj jedinice i dodaj ih zbiru tog reda. Kada obradiš sve komade drveta, zbir prvih p redova predstavlja količinu drveta sa jedne strane testere postavljene na poziciju p. Ukupna količina drveta umanjena za taj zbir predstavlja količinu sa druge strane. Isprobaj sve pozicije od 0 do k i izaberi najmanju apsolutnu razliku.
ZADATAK 29 2022/23. · 7. razred

Kontrolna cifra

Stringovi Cifre Kontrolna suma

Napomena: Zadatak sa 3. kruga kvalifikacija, sezona 2022/23, za 7. razred. Preuzet sa takprog.petlja.org.

Potrebno predznanje: Podaci u C++, Operatori u C++, Grananje, Petlje, Stringovi i Nizovi.

Opciono: Dinamički niz – vector.

Kreditne kartice imaju 16 cifara, od kojih se poslednja koristi kao kontrolna cifra i izračunava se na osnovu ostalih 15.

Cifre se dele u dve grupe prema pozicijama koje se broje od nule, sleva nadesno. Cifre na parnim pozicijama množe se sa 2. Ako je dobijeni rezultat dvocifren, sabiraju se njegove cifre. Cifre na neparnim pozicijama ostaju nepromenjene.

Zatim se sabiraju sve transformisane i nepromenjene cifre. Kontrolna cifra bira se tako da njenim dodavanjem tom zbiru dobijemo broj deljiv sa 10.

Napisati program koji na osnovu prvih 15 cifara određuje kontrolnu cifru.

Ulaz

Unosi se niska od tačno 15 cifara.

Izlaz

Ispisati jednu cifru — izračunatu kontrolnu cifru.

Primer 1
Ulaz
430239720231900
Izlaz
7

Cifre na parnim pozicijama su 4, 0, 3, 7, 0, 3, 9 i 0. Posle množenja sa 2 i sabiranja cifara dvocifrenih rezultata dobijaju se 8, 0, 6, 5, 0, 6, 9 i 0.

Cifre na neparnim pozicijama ostaju 3, 2, 9, 2, 2, 1 i 0. Njihov zbir je 19, a zbir transformisanih cifara sa parnih pozicija je 34. Ukupan zbir je 53, pa je kontrolna cifra 7 jer je 53 + 7 = 60.

Ideja za rešavanje: Učitaj cifre kao string kako bi se sačuvale sve pozicije. Prođi kroz prvih 15 znakova. Cifre na parnim indeksima udvostruči; ako je rezultat veći od 9, oduzmi 9. Saberi dobijene vrednosti. Kontrolna cifra je (10 − zbir % 10) % 10.
ZADATAK 30 2022/23. · 8. razred

Obrtanje

Stringovi Veliki brojevi Palindromi

Napomena: Zadatak sa 2. kruga kvalifikacija, sezona 2022/23, za 8. razred. Preuzet sa takprog.petlja.org.

Potrebno predznanje: Podaci u C++, Operatori u C++, Grananje, Petlje, Stringovi i Nizovi.

Opciono: Dinamički niz – vector.

Dat je broj N i broj njegovih obrtanja r. Potrebno je ispisati da li je broj koji se dobija posle r uzastopnih obrtanja broja N jednak početnom broju N.

Obrtanjem broja dobija se broj zapisan istim ciframa, ali obrnutim redosledom. Na primer, obrtanjem broja 310 dobija se 13, a obrtanjem broja 2227 dobija se 7222.

Ulaz

U prvom redu nalazi se broj N, a u drugom broj r. Oba broja su nenegativna cela i važi 0 ≤ N < 10⁵⁰⁰⁰⁰ i 0 ≤ r < 1 000 000.

U testovima vrednim 60% poena važi 0 ≤ N < 200 000 i 0 ≤ r < 15.

Izlaz

Ispisati DA ako je rezultat posle r obrtanja jednak početnom broju, a u suprotnom ispisati NE.

Primer 1
Ulaz
1239999999999999999999321
787657
Izlaz
DA
Primer 2
Ulaz
1000000020000000300000004
458698
Izlaz
DA
Primer 3
Ulaz
10000000200000003000000040
2
Izlaz
NE
Ideja za rešavanje: Ne moramo zaista da obavimo do milion obrtanja. Ako je r = 0, broj ostaje nepromenjen. Ako je N = 0, takođe ostaje isti za bilo koji broj obrtanja. Ako se N završava nulom i r je pozitivan, prvo obrtanje uklanja te završne nule, pa broj više ne može biti jednak početnom. U ostalim slučajevima obrtanje se ponaša kao obična promena redosleda znakova: paran broj obrtanja vraća početni broj, a neparan broj ga vraća samo ako je N palindrom.
ZADATAK 31 2022/23. · 7. razred

Naizmenična podela

Strategija Rekurzija Matematika

Napomena: Zadatak sa 3. kruga kvalifikacija, sezona 2022/23, za 7. razred. Preuzet sa takprog.petlja.org.

Potrebno predznanje: Podaci u C++, Operatori u C++, Grananje i Petlje.

Prema priči iz zadatka, bog trgovine i kakaoa Ek Chuah i bog munje Kʼawiil bore se za poslednju štanglicu čokolade. Štanglica ima n kockica.

Ek Chuah prvi pravi jedan rez i deli štanglicu na dva dela. Zatim Kʼawiil bira jedan od ta dva dela i uzima ga. Postupak se nastavlja na delu koji je ostao: bogovi naizmenično prave rezove i uzimaju odabrane delove. Kada ostane samo jedna kockica, ona pripada bogu koji je sledeći na redu da je uzme.

Obojica žele da dobiju što više čokolade i igraju optimalno. Napisati program koji određuje koliko će kockica dobiti Ek Chuah.

Ulaz

U jednom redu unosi se prirodan broj n, gde je 1 ≤ n ≤ 10⁹.

Izlaz

Ispisati jedan ceo broj — broj kockica koje će Ek Chuah dobiti ako oba boga igraju optimalno.

Primer 1
Ulaz
7
Izlaz
2

Ek Chuah podeli štanglicu na delove od 4 i 3 kockice. Kʼawiil uzima deo od 4 kockice. Zatim Kʼawiil deli preostale 3 kockice na delove od 1 i 2, a Ek Chuah uzima deo od 2 kockice. Poslednja kockica pripada Kʼawiilu. U ovom primeru Ek Chuah dobija 2, a Kʼawiil 5 kockica.

Primer 2
Ulaz
13
Izlaz
4
Primer 3
Ulaz
2
Izlaz
1
Primer 4
Ulaz
1
Izlaz
0
Ideja za rešavanje: Optimalni potez deli preostali deo što ravnomernije, jer protivnik bira koji deo uzima. Zato se broj kockica koje igrač može da osvoji može izračunati pomoću rekurzivne funkcije. Nije potrebno simulirati svako sečenje — dovoljno je nekoliko rekurzivnih poziva dok se broj ne svede na 1.
ZADATAK 32 Razred i sezona nisu navedeni

Ko prvi igra

Nizovi Sortiranje Uslovi

Potrebno predznanje: Podaci u C++, Operatori u C++, Grananje i Nizovi.

Ana, Boban i Vlada žele da igraju društvenu igru. Da bi odredili redosled igranja, svako od njih baca kockicu. Prvi igra onaj ko je dobio najveći broj, drugi onaj ko je dobio sledeći najveći broj, a treći igrač onaj ko je dobio najmanji broj.

Napisati program koji ispisuje redosled igranja na osnovu rezultata bacanja kockica.

Ulaz

Unose se tri različita broja a, b i v, razdvojena razmacima. Svaki broj je između 1 i 6. Oni predstavljaju rezultate bacanja kockica Ane, Bobana i Vlade, tim redom.

Izlaz

Ispisati slova A, B i V prema redosledu kojim igrači igraju. Slova se ispisuju bez razmaka.

Primer 1
Ulaz
2 6 3
Izlaz
BVA

Boban je dobio 6, Vlada 3, a Ana 2, pa igraju redom B, V, A.

Primer 2
Ulaz
5 4 3
Izlaz
ABV
Primer 3
Ulaz
2 1 4
Izlaz
VAB
Ideja za rešavanje: Sačuvaj rezultat bacanja svake osobe zajedno sa njenim slovom. Zatim poređaj igrače po rezultatu od najvećeg ka najmanjem i ispiši njihova slova tim redom.
ZADATAK 33 2023/24. · Razred nije potvrđen

Zbir izdvojenih grupa cifara iz broja

Cifre Celobrojno deljenje Ostatak pri deljenju

Napomena: U dostavljenom tekstu zadatak je naveden u odeljku o kvalifikacijama 2023/24. za 6. razred, ali zaglavlje tog odeljka navodi zadatke 35–37. Razred zato treba potvrditi. Portal naveden kao izvor: takprog.petlja.org/osnovnaskola.

Potrebno predznanje: Podaci u C++, Operatori u C++ i Grananje.

Uneti šestocifreni ceo broj i sabrati dvocifrene brojeve koji se dobijaju izdvajanjem prve dve i poslednje dve cifre početnog broja.

Na primer, za broj 123456 prve dve cifre formiraju broj 12, a poslednje dve cifre broj 56. Traženi zbir je 12 + 56 = 68.

Ulaz

Unosi se jedan šestocifreni ceo broj.

Izlaz

Ispisati zbir broja koji čine prve dve cifre i broja koji čine poslednje dve cifre unetog broja.

Primer 1
Ulaz
123456
Izlaz
68

Prve dve cifre daju 12, a poslednje dve 56. Zbir je 12 + 56 = 68.

Primer 2
Ulaz
678341
Izlaz
108

Celobrojnim deljenjem sa 10000 dobija se 67, a ostatak pri deljenju sa 100 je 41. Zato je traženi zbir 67 + 41 = 108.

Ideja za rešavanje: Za izdvajanje prve dve cifre podeli broj sa 10000 celobrojno. Za izdvajanje poslednje dve cifre izračunaj ostatak pri deljenju sa 100. Saberi dobijene vrednosti.

34. Preklapanje cifara

Napomena: Zadatak iz programiranja. Razred nije posebno naveden u dostavljenoj postavci.

Potrebno predznanje: Podaci u C++, Operatori u C++.

Mare i Paja igraju igricu i došli su do nivoa na kojem treba da reše šifru. Shvatili su da je šifra petocifren broj koji je bio zapisan na zidu na prethodnom nivou igrice.

Nijedan od njih ne može da se seti celog broja, ali se sećaju njegovih delova. Mare je zapamtio prve tri cifre, a Paja poslednje tri.

Pomozite im da pređu na sledeći nivo tako što ćete odrediti traženi petocifreni broj. Pretpostavite da su obojica ispravno zapamtila cifre i da su uneti podaci ispravni.

Ulaz

U prvom redu nalazi se trocifren broj koji je zapamtio Mare. U drugom redu nalazi se trocifren broj koji je zapamtio Paja.

Izlaz

Ispisati traženi petocifreni broj.

Primer 1

Ulaz
145
563
Izlaz
14563

Objašnjenje: Mare je zapamtio prve tri cifre, pa broj počinje ciframa 145. Paja je zapamtio poslednje tri cifre, pa se broj završava ciframa 563. Traženi broj je 14563.

Primer 2

Ulaz
788
851
Izlaz
78851

35. Najveća prednost domaćih

Napomena: Zadatak iz programiranja. Razred nije posebno naveden u dostavljenoj postavci.

Potrebno predznanje: Podaci u C++, Operatori u C++, Grananje u programu u C/C++, Petlje.

Dat je rezultat košarkaške utakmice nakon svake četvrtine. Odrediti kolika je najveća moguća prednost domaće ekipe tokom utakmice.

Rezultati su dati nakon završetka svake četvrtine. Tokom četvrtine, domaća ekipa može da postigne svoje poene pre nego što gostujuća ekipa postigne svoje poene u toj četvrtini.

Ulaz

U svakom od četiri reda standardnog ulaza nalaze se po dva cela nenegativna broja razdvojena razmakom.

Svaki red odgovara rezultatu nakon jedne četvrtine, redom. Prvi broj predstavlja broj poena domaće ekipe, a drugi broj broj poena gostujuće ekipe. Nijedan broj nije veći od 200.

Izlaz

Ispisati jedan ceo broj — najveću moguću prednost domaće ekipe. Ako domaća ekipa ni u jednom trenutku nije mogla da ima prednost, ispisati 0.

Primer 1

Ulaz
21 18
39 40
63 54
78 77
Izlaz
24

Obrazloženje: U jednom trenutku rezultat je mogao da bude 78:54, što predstavlja prednost domaće ekipe od 24 poena.

Primer 2

Ulaz
0 1
1 3
2 5
4 9
Izlaz
0

Obrazloženje: Domaća ekipa nikada nije bila u vođstvu. Najpovoljniji rezultat za nju bio je na početku utakmice, kada je rezultat bio 0:0.


36. Promena škole

Napomena: Zadatak iz programiranja. Razred nije posebno naveden u dostavljenoj postavci.

Potrebno predznanje: Podaci u C++, Operatori u C++, Grananje u programu u C/C++.

Na kraju prvog razreda srednje škole Ivana je odlučila da se prebaci iz medicinske škole u gimnaziju. U gimnaziji su odlučili da joj računaju prosečnu ocenu samo iz predmeta koji postoje u obe škole.

Znamo da se \(k\) Ivaninih predmeta iz medicinske škole neće računati u prosek u gimnaziji. Odrediti Ivanin novi prosek ako su poznati ukupan broj predmeta koje je slušala u medicinskoj školi (\(n\)), ocene iz predmeta koji se neće računati i njen dosadašnji prosek \(p\).

Pretpostaviti da je Ivana završila razred, odnosno da nije imala nijednu zaključenu jedinicu.

Prosek ocena \(a_1,a_2,\ldots,a_n\) računa se kao:

\((a_1+a_2+\cdots+a_n)/n\)

Ulaz

U prvom redu standardnog ulaza nalazi se prirodan broj \(n\), a u drugom broj \(k\), pri čemu važi \(1 \leq k < n \leq 50\).

U narednih \(k\) redova date su Ivanine zaključne ocene iz predmeta koji se neće računati u novi prosek. Svaka ocena je prirodan broj od 2 do 5.

U poslednjem redu nalazi se broj \(p\), koji predstavlja Ivanin dosadašnji prosek iz medicinske škole, zaokružen na dve decimale.

Izlaz

Ispisati novi Ivanin prosek, zaokružen na dve decimale.

Primer 1

Ulaz
3
1
4
4.33
Izlaz
4.50

Primer 2

Ulaz
12
3
4
5
4
4.58
Izlaz
4.67

37. PIN aplikacije od PIN-a telefona

Napomena: Zadatak sa kvalifikacija za školsku 2024/25. godinu. U postojećoj postavci naveden je 8. razred.

Potrebno predznanje: Podaci u C++, Operatori u C++, Operatori — primeri.

Student treba da odredi četvorocifreni PIN za novu aplikaciju, ali nije siguran da će ga dobro zapamtiti. Zato je smislio da novi PIN izračuna na osnovu PIN-a svog telefona.

Sabraće PIN svog telefona, broj koji se dobija kada se tom PIN-u zamene prva i poslednja cifra i broj koji se dobija kada se zamene dve središnje cifre.

Novi PIN čine poslednje četiri cifre tako dobijenog zbira.

Na primer, ako je PIN telefona 1234, računa se zbir \(1234 + 4231 + 1324 = 6789\), pa je novi PIN 6789.

Ulaz

Sa standardnog ulaza unosi se četvorocifreni PIN telefona. PIN može da sadrži vodeće nule.

Izlaz

Ispisati četvorocifreni PIN aplikacije, uključujući vodeće nule ako ih ima.

Primer 1

Ulaz
1234
Izlaz
6789

Primer 2

Ulaz
9999
Izlaz
9997

Objašnjenje: Zbir je \(9999 + 9999 + 9999 = 29997\), pa poslednje četiri cifre daju 9997.


38. Horoskop

Napomena: Zadatak sa 2. kruga kvalifikacija, sezona 2019/20. Razred nije potvrđen u dostavljenoj postavci.

Izvor: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Podaci u C++, Grananje u programu u C/C++, Petlje, Stringovi.

Jedinstveni matični broj građana (JMBG) je niz od 13 cifara. Prve dve cifre predstavljaju dan, a sledeće dve mesec rođenja. Na primer, ako JMBG počinje sa 0904, osoba je rođena 9. aprila, a ako počinje sa 3112, osoba je rođena 31. decembra.

Perica želi da prebroji koliko osoba sa spiska pripada svakom horoskopskom znaku. Za svaki znak poznati su početni i završni datumi:

  • OVAN — od 21. marta do 20. aprila
  • BIK — od 21. aprila do 21. maja
  • BLIZANCI — od 22. maja do 21. juna
  • RAK — od 22. juna do 22. jula
  • LAV — od 23. jula do 22. avgusta
  • DEVICA — od 23. avgusta do 22. septembra
  • VAGA — od 23. septembra do 23. oktobra
  • ŠKORPIJA — od 24. oktobra do 22. novembra
  • STRELAC — od 23. novembra do 21. decembra
  • JARAC — od 22. decembra do 20. januara
  • VODOLIJA — od 21. januara do 19. februara
  • RIBE — od 20. februara do 20. marta

Ulaz

U prvom redu nalazi se broj \(N\) (\(1 \leq N \leq 200\)), koji predstavlja broj JMBG-ova na spisku.

U svakom od narednih \(N\) redova nalazi se po jedan JMBG od 13 cifara, bez razmaka.

Izlaz

Ispisati 12 celih brojeva, svaki u posebnom redu. Prvi broj predstavlja broj osoba u znaku Ovna, drugi u znaku Bika i tako redom, sve do dvanaestog broja koji predstavlja broj osoba u znaku Riba.

Primer 1

Ulaz
5
1504279718463
0412622712918
1903326718649
0710262713307
0104646719372
Izlaz
2
0
0
0
0
0
1
0
1
0
0
1

39. Artimogrifi

Napomena: Zadatak sa 2. kruga kvalifikacija. Razred i sezona nisu potvrđeni u dostavljenoj postavci.

Potrebno predznanje: Podaci u C++, Stringovi, Nizovi.

Pri rešavanju jedne poznate vrste aritmetičkih rebusa potrebno je ista slova zameniti istim ciframa, a različita slova različitim ciframa, tako da se dobije tačna jednakost.

Na primer, za rebus SNEG + KRUG = SPORT jedno od rešenja je 1937 + 8627 = 10564. U ovom zadatku ne proverava se da li je jednakost tačna, već samo da li je zamena slova ciframa pravilno izvedena.

Na primer, ponuđeno „rešenje” 4832 + 5962 = 10794 nije ispravno, iako je jednakost tačna. Slovo S je na jednom mestu zamenjeno cifrom 4, a na drugom cifrom 1. Takođe, cifra 4 odgovara dvama različitim slovima.

Napisati program koji proverava da li je zamena slova ciframa pravilno izvedena.

Ulaz

U prvom redu unosi se string koji predstavlja aritmetički rebus. Može da sadrži velika slova engleske abecede, razmake, znake matematičkih operacija i znak jednakosti. Ukupna dužina stringa nije veća od 100, a broj različitih slova nije veći od 10.

U drugom redu unosi se string koji predstavlja ponuđeno rešenje rebusa iz prvog reda. Drugi string se od prvog razlikuje isključivo po tome što je svako slovo zamenjeno nekom cifrom.

Izlaz

Ispisati `da` ako je zamena pravilna, bez obzira na to da li je jednakost tačna. U suprotnom ispisati `ne`.

Primer 1

Ulaz
SNEG + KRUG = SPORT
2341 + 8751 = 20679
Izlaz
da

Primer 2

Ulaz
SNEG + KRUG = SPORT
4832 + 5962 = 10794
Izlaz
ne

40. Dve police

Takmičenje: drugi krug kvalifikacija

Razred: razred nije potvrđen

Postavka zadatka

U prodavnici se prodaju dve vrste polica čije su dužine i cene poznate. Police želimo da postavimo duž jednog zida tako da popunimo što veći deo njegove dužine. Ako se ista dužina zida može popuniti na više načina, biramo onu kombinaciju polica koja ima najmanju ukupnu cenu.

Napisati program koji određuje najveću moguću dužinu zida koju možemo da popunimo policama i najmanju cenu po kojoj to možemo da uradimo.

Ulaz

U prvom redu standardnog ulaza nalazi se ceo broj z (1 ≤ z ≤ 10⁶) koji predstavlja dužinu zida. U naredna dva reda nalaze se podaci o vrstama polica: dužina i cena. Dužina svake police je prirodan broj između 1 i 10⁶, a cena je prirodan broj između 1 i 1000.

Izlaz

Ispisati najveću moguću dužinu zida koja se može popuniti policama i najmanju ukupnu cenu za tu dužinu, razdvojene jednim razmakom.

Primer

Ulaz

24
3 10
5 8

Izlaz

24 54

Jedan način da se popuni svih 24 jedinice zida jeste da se upotrebe tri police dužine 3 i tri police dužine 5. Njihova ukupna cena je 3 · 10 + 3 · 8 = 54.

Ideja rešenja

Za svaku dužinu zida od 0 do z računamo najmanju cenu kojom se ta dužina može potpuno popuniti. Do neke dužine možemo doći dodavanjem police prve ili druge vrste na već popunjeni deo zida. Kada izračunamo sve mogućnosti, tražimo najveću dostižnu dužinu koja nije veća od z.


41. Najveći broj od datih cifara

Takmičenje: treći krug kvalifikacija

Razred: razred nije potvrđen

Postavka zadatka

Za dati prirodan broj potrebno je ispisati najveći broj koji se može zapisati koristeći iste cifre, pri čemu se svaka cifra upotrebljava isti broj puta kao u polaznom broju.

Ulaz

U prvom redu standardnog ulaza nalazi se broj N. Broj može imati najviše 30 cifara.

Izlaz

Ispisati najveći broj koji se može sastaviti od cifara broja N.

Primer 1

Ulaz

90123

Izlaz

93210

Primer 2

Ulaz

777

Izlaz

777

Ideja rešenja

Da bi broj bio što veći, njegove cifre treba poređati od najveće ka najmanjoj. Broj čitamo kao string jer može imati 30 cifara, što je više nego što staje u standardne celobrojne tipove.


42. Riziko

Takmičenje: treći krug kvalifikacija

Razred: razred nije potvrđen

Postavka zadatka

Tokom igre Riziko napadač i odbrambeni igrač ulaze u bitke bacanjem kockica. Svaki igrač ima tri kockice, ali u zavisnosti od trenutnog stanja igre može da baci jednu, dve ili tri kockice.

Nakon bacanja, kockice svakog igrača poređaju se od najveće ka najmanjoj. Zatim se porede najjače kockice, pa druge po jačini, a zatim i najslabije kockice, ukoliko postoje kod oba igrača. Ako je jedan igrač bacio manje kockica, neupoređene slabije kockice drugog igrača se zanemaruju.

Ako napadač ima strogo veći broj na kockici od odbrambenog igrača, odbrambeni igrač gubi jedan poen. U suprotnom, napadač gubi jedan poen. Dakle, u slučaju jednakih vrednosti poen gubi napadač.

Napisati program koji određuje koliko poena gubi napadač, a koliko odbrambeni igrač.

Ulaz

Prvi red sadrži broj kockica koje je bacio napadač (1, 2 ili 3). Drugi red sadrži vrednosti njegovih kockica, od 1 do 6. Treći red sadrži broj kockica koje je bacio odbrambeni igrač (1, 2 ili 3), a četvrti red vrednosti njegovih kockica.

Izlaz

Ispisati broj poena koje gubi napadač i broj poena koje gubi odbrambeni igrač, razdvojene jednim razmakom.

Primer

Ulaz

3
5 6 3
3
5 3 4

Izlaz

1 2

Napadačeve kockice su 6, 5 i 3, a odbrambenog igrača 5, 4 i 3. Napadač dobija prvo poređenje, jer je 6 veće od 5. U drugom poređenju 5 je veće od 4, pa odbrambeni igrač gubi još jedan poen. U trećem poređenju vrednosti su jednake, pa napadač gubi jedan poen.

Ideja rešenja

Sortiramo oba niza kockica opadajuće. Poređenje ponavljamo onoliko puta koliko ima kockica kod igrača koji ih je bacio manje. Za svako poređenje uvećamo broj izgubljenih poena odgovarajućeg igrača.


43. ATP pobednik

Takmičenje: treći krug kvalifikacija

Razred: razred nije potvrđen

Postavka zadatka

Tokom godine održavaju se brojni teniski turniri na kojima teniseri osvajaju poene. Poeni osvojeni na različitim turnirima sabiraju se, a na kraju godine teniseri se rangiraju prema ukupnom broju poena.

Napisati program koji na osnovu rezultata svih turnira određuje tenisera sa najviše osvojenih poena i ispisuje njegovo prezime i ukupan broj poena. Pretpostaviti da pobednik ima strogo više poena od svih ostalih tenisera.

Ulaz

U prvom redu standardnog ulaza nalazi se broj n. U narednih n redova nalaze se prezime tenisera i broj poena osvojenih na jednom turniru. Isti teniser može da se pojavi više puta.

Izlaz

Ispisati prezime pobednika i njegov ukupan broj poena, razdvojene jednim razmakom.

Primer 1

Ulaz

9
Djokovic 1000
Nadal 800
Federer 600
Nadal 1000
Federer 800
Djokovic 600
Djokovic 1000
Cicipas 800
Nadal 600

Izlaz

Djokovic 2600

Primer 2

Ulaz

6
Zverev 1000
Cicipas 800
Medvedev 700
Thiem 1000
Cicipas 800
Medvedev 600

Izlaz

Cicipas 1600

Ideja rešenja

Za svakog tenisera vodimo ukupan zbir poena. Kada učitamo rezultat turnira, dodajemo osvojene poene zbiru tog tenisera. Nakon obrade svih redova pronalazimo tenisera sa najvećim ukupnim zbirom.