PRIPREMA ZA DRŽAVNO TAKMIČENJE · OSNOVNA ŠKOLA

Priprema za državno takmičenje iz informatike

Ova stranica je vodič za pripremu za rešavanje zadataka koji se pojavljuju na državnim takmičenjima iz informatike za osnovne škole. Uz zadatke su pokazani i jednostavni pripremni primeri koji su sastavni deo većih zadataka. Svaki zadatak ima detaljno uputstvo i C++ rešenje (a gde postoji efikasnije rešenje – i više njih), koje možeš da prikažeš kada pokušaš da ga rešiš sam. Na kraju strane nalazi se kviz.

Ako se prethodno niste pripremili za okružno takmičenje, pogledajte stranu Priprema za okružna takmičenja.

Državno takmičenje iz 2021

Zadatke sa rešenjima i test primerima možete preuzeti i sa sajta Društva matematičara Srbije: dms.rs/informatika-osnovne-skole

ZADATAK 01 2021.

Prašuma

Državno takmičenje 5. i 6. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Postavka zadatka

U prašumi je nađena čudesna tablica sa 3 reda i 3 kolone ispunjena ciframa. Pored tablice je nađen tekst zagonetke. Zagonetka kaže: „Formirajte prvi trocifreni broj na osnovu cifara sa glavne dijagonale tablice, počev od vrha i idući ka dnu tablice. Zatim formirajte još jedan trocifreni broj koji se sastoji od cifara sa sporedne dijagonale, takođe počevši od vrha do dna. Rešenje zagonetke je proizvod ova dva trocifrena broja.“ Napišite program koji učitava cifre napisane na tablici i ispisuje proizvod dva trocifrena broja koji se formiraju na opisani način.

Pojašnjenje: Glavnu dijagonalu tablice obrazuju redom: prva cifra prvog reda, srednja cifra drugog reda i poslednja cifra trećeg reda. Sporednu dijagonalu obrazuju redom: poslednja cifra prvog reda, srednja cifra drugog reda i prva cifra trećeg reda.

Ulaz

U svakom od tri reda standardnog ulaza date su tri cifre, zapisane bez razmaka.

Izlaz

Na standardnom izlazu program mora da ispiše jedan ceo broj – proizvod dva trocifrena broja koji se dobija na gore opisan način.

Primer

Ulaz

123
456
789

Izlaz

56763
Objašnjenje

Broj formiran od cifara na glavnoj dijagonali je 159, a broj formiran od cifara na sporednoj dijagonali je 357. Njihov proizvod je 56763.

Analiza zadatka

Jedan od načina da se zadatak reši je upotrebom matrica i ugnježdenih petlji. Pošto se ove oblasti često pojavljuju na državnom takmičenju, preporuka je da ih dobro poznajete. Pre rešavanja ovog zadatka preporučuje se da prvo uradite dva pripremna zadatka koja slede.

Pripremni zadatak 1: dijagonale matrice

Učitati 9 brojeva u matricu 3×3. Ispisati vrednosti na glavnoj i na sporednoj dijagonali.

Primer

Ulaz

1 2 3
4 5 6
7 8 9

Izlaz

Glavna dijagonala: 1 5 9
Sporedna dijagonala: 3 5 7

Uputstvo i rešenje

Pripremni zadatak 2: sastaviti broj od poznatih cifara

Uneti 4 cela broja koji predstavljaju cifre četvorocifrenog broja. Sastaviti novi broj čije su cifre u obrnutom redosledu.

Primer

Ulaz

4
5
6
7

Izlaz

7654

Uputstvo i rešenje

Uputstvo i rešenja

ZADATAK 02 2021.

Zbir kvadrata neparnih cifara

Državno takmičenje 5. i 6. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Postavka zadatka

Lenka želi da izračuna zbirove kvadrata neparnih cifara nekoliko brojeva. Pomozi Lenki i napiši program koji sa standardnog ulaza učitava jedan prirodan broj manji od milijardu i na standardni izlaz ispisuje zbir kvadrata njegovih neparnih cifara (ako takvih cifara nema, računamo da je zbir nula). Kvadrat neke cifre jednak je proizvodu te cifre sa samom sobom. Na primer, kvadrat cifre 3 je 9, jer je 3 · 3 = 9.

Ulaz

Sa standardnog ulaza učitava se jedan prirodan broj manji od milijardu.

Izlaz

Na standardni izlaz ispisati zbir kvadrata neparnih cifara tog broja.

Primer 1

Ulaz

1234560

Izlaz

35
Objašnjenje

Neparne cifre su 1, 3 i 5: 1 + 9 + 25 = 35.

Primer 2

Ulaz

11

Izlaz

2

Primer 3

Ulaz

888

Izlaz

0
Objašnjenje

Nema neparnih cifara.

Analiza zadatka

Da bi se izdvojile cifre iz broja, koriste se operatori % i / (ostatak pri deljenju sa 10 i celobrojno deljenje sa 10). Takođe je potrebno znati kako se brojevi sabiraju pomoću petlje.

Uputstvo i rešenja

ZADATAK 03 2021.

Čarobni niz

Državno takmičenje 5. i 6. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Petlje u C/C++ Funkcije u C/C++

Postavka zadatka

Laza je odlučio da napravi čarobni niz brojeva na sledeći način: počeo je da pravi niz od nekog zadatog broja, a svaki naredni član niza dobija se tako što se prethodnom broju doda broj svih njegovih delilaca. Na primer, ako je neki član niza jednak 6, onda je sledeći član niza 6 + 4, tj. 10, jer postoje tačno 4 delioca broja 6 (to su redom brojevi 1, 2, 3, 6).

Napišite program koji učitava sa standardnog ulaza u prvom redu prvi član niza (0 < a1 ≤ 10000), a u drugom redu prirodan broj N (0 < N ≤ 100) i štampa na standardni izlaz N-ti član Lazinog niza.

Ulaz

U prvom redu je prvi član niza a1 (0 < a1 ≤ 10000), a u drugom redu prirodan broj N (0 < N ≤ 100).

Izlaz

Ispisati N-ti član Lazinog niza.

Primer 1

Ulaz

2
4

Izlaz

9
Objašnjenje

a1 = 2, a2 = 4, a3 = 7, a4 = 9.

Primer 2

Ulaz

3882
93

Izlaz

4878

Analiza zadatka

Zadatak se rešava tako što se u posebnu funkciju izdvoji određivanje broja delilaca datog broja. Za rešavanje je potrebno poznavanje petlji, a opciono i funkcija.

Uputstvo i rešenja

ZADATAK 04 2021.

Mesto K-tog pojavljivanja broja

Državno takmičenje 5. i 6. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Grananje u programu Petlje u C/C++

Postavka zadatka

Pogledajmo sledeće redove:

1
121
12321
1234321
123454321
...

Red čiji je redni broj M (M = 1, 2, 3, ...) formira se zapisivanjem redom prirodnih brojeva od 1 do M, a zatim zapisivanjem brojeva u obratnom smeru od M − 1 do 1. Sada formiramo beskonačni red uzimajući prvi od gore navedenih redova i dodajući mu drugi red, zatim dodajemo treći red i tako dalje. Početak formirane beskonačne serije brojeva izgleda ovako:

1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 ...

Članovi ove serije numerisani su počev od jedan. Napišite program koji pronalazi na kom mestu se dati broj n javlja po k-ti put.

Ulaz

U jedinom redu standardnog ulaza data su dva cela broja n i k, odvojena jednim razmakom (0 < n ≤ 1 000 000, 0 < k ≤ 1 000 000).

Izlaz

Na standardnom izlazu program mora da ispiše ceo broj – poziciju k-te pojave broja n u nizu.

Primer 1

Ulaz

1 1

Izlaz

1

Primer 2

Ulaz

2 2

Izlaz

6
Objašnjenje

Niz je 1 1 2 1 1 2 3 2 1 .... Broj 2 je prvi put na mestu 3, a drugi put na mestu 6.

Primer 3

Ulaz

3 3

Izlaz

14

Analiza zadatka

Uočimo pravilo. Red sa rednim brojem M ima 2M − 1 članova, pa je posle prvih M redova u nizu ukupno M² članova (1 + 3 + 5 + ... + (2M − 1) = M²).

Red MSadržaj redaDužina redaPozicija poslednjeg člana u nizu
1111
21 2 134
31 2 3 2 159
41 2 3 4 3 2 1716
51 2 3 4 5 4 3 2 1925
61 2 3 4 5 6 5 4 3 2 11136

Broj n se ne javlja u redovima manjim od n. U redu n javlja se tačno jednom (u sredini), a u svakom narednom redu M > n javlja se tačno dvaput: na n-tom mestu reda i na mestu 2M − n.

Uputstvo i rešenja

ZADATAK 05 2021.

Neparan broj delilaca

Državno takmičenje 7. i 8. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Petlje u C/C++ Funkcije u C/C++

Postavka zadatka

Napišite program koji pronalazi koliko celih brojeva koji se nalaze između dve zadate vrednosti a i b (uključujući a i b) ima neparan broj delilaca.

Ulaz

U jedinom redu standardnog ulaza date su dva cela broja a i b, odvojena jednim razmakom (0 < a ≤ b < 1015).

Izlaz

Na standardnom izlazu program mora da ispiše ceo broj – broj celih brojeva između a i b (uključujući a i b) koji imaju neparan broj delilaca.

Primer

Ulaz

3 12

Izlaz

2
Objašnjenje

Delioci brojeva od 3 do 12 su: 3: 1, 3; 4: 1, 2, 4; 5: 1, 5; 6: 1, 2, 3, 6; 7: 1, 7; 8: 1, 2, 4, 8; 9: 1, 3, 9; 10: 1, 2, 5, 10; 11: 1, 11; 12: 1, 2, 3, 4, 6, 12. Vidimo da ukupno dva broja (4 i 9) imaju neparan broj delilaca.

Uputstvo i rešenja

Dodatna analiza zadatka
ZADATAK 06 2021.

Bašta sljezove boje

Državno takmičenje 7. i 8. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Petlje u C/C++ Ugnježdene petlje u C/C++

Postavka zadatka

Sećate se „Bašte sljezove boje“, divne knjige Branka Ćopića i avantura malog Baje, samardžije Petraka, Bajinog đeda... Mali Baja ima nekoliko kartica i na svakoj kartici je upisan ceo broj između 1 i 10. Baja i stari Petrak krenuli su u pohod na Mesec. Za to vreme đed Rade, koji baš ne vidi dobro, poređao je kartice u niz.

Kada se Baja vratio sa neuspešnog pohoda na Mesec, započeo je deljenje kartica. U svakom deljenju želeo je da složi dobijene kartice od najmanje do najveće (ako ima kartica koje se ponavljaju, te kartice se nalaze jedna uz drugu). Pomozite Baji tako što ćete napisati program koji izračunava koliko puta je Baja pogrešio i nije složio karte kako je želeo.

Ulaz

Iz prvog reda standardnog ulaza čita se ceo broj N (1 < N < 100) – broj deljenja koje je Baja igrao, zatim broj k (2 < k < 10) – broj karata u svakom deljenju, a zatim za svako deljenje po k karata navedenih onako kako ih je Baja složio. Svaki broj je naveden u zasebnom redu.

Izlaz

U jednom redu standardnog izlaza program treba da prikaže broj deljenja u kojima Baja nije dobro složio kartice.

Primer

Ulaz

4
3
1
2
3
4
3
4
1
5
5
8
8
8

Izlaz

1
Objašnjenje

Učitani su podaci za 4 deljenja (po 3 karte). Dobro su složena prvo, treće i četvrto deljenje. Nije dobro složeno drugo deljenje sa karticama 4, 3, 4.

Uputstvo i rešenja

Dodatna analiza zadatka
ZADATAK 07 2021.

Dinosaurus Dino

Državno takmičenje 7. i 8. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Petlje u C/C++ Binarna pretraga

Postavka zadatka

Dinosaurus Dino uživa na turniru koji je organizovao poznati internet pregledač. Sećate se igre sa dinosaurusom, tj. igre sakupljanja kaktusa. Svaki učesnik u igri ima pravo da sakuplja redom uzastopne kaktuse, poređane duž prave linije. Državna komisija treba da odredi prag za prolazak takmičara sa prvog nivoa igre na sledeći nivo gledajući isključivo broj skupljenih kaktusa. U ovoj igri učestvuje veliki broj takmičara.

Dino održava tabelu sa poenima i takmičari ga stalno pitaju koliko bi takmičara prošlo dalje kada bi donja granica prolaza bila toliko i toliko poena (dalje se plasiraju svi učesnici čiji je broj poena veći ili jednak donjoj granici). Dino je odlučio da napiše program koji daje odgovor na ta pitanja.

Ulaz

Sa standardnog ulaza učitava se broj takmičara n (1 ≤ n ≤ 50000), a zatim i poeni takmičara (prirodni brojevi), zadati u sortiranom redosledu od najvećeg do najmanjeg i razdvojeni razmacima. Nakon toga se učitava broj m (1 ≤ m ≤ 50000) koji predstavlja broj pitanja na koja Dino treba da odgovori, a zatim i m brojeva razdvojenih razmacima za koje je potrebno dati odgovor koliko bi se takmičara plasiralo kada bi se taj broj uzeo za donju granicu.

Izlaz

Na standardni izlaz ispisati tražene brojeve takmičara koji su se plasirali, u posebnom redu za svaku donju granicu.

Primer

Ulaz

5
79 63 63 46 13
4
85 40 60 5

Izlaz

0
4
3
5
Objašnjenje

Ako je prag 85 poena, niko se nije plasirao. Ako je prag 40 poena, plasirali su se takmičari sa 79, 63, 63 i 46 poena. Ako je prag 60 poena, plasirali su se takmičari sa 79, 63 i 63 poena. Ako je prag 5 poena, svi takmičari su se plasirali.

Uputstvo i rešenja

Državno takmičenje iz 2019

ZADATAK 08 2019.

Visoki učenici

Državno takmičenje 6. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Grananje u programu Petlje u C/C++

Postavka zadatka

Poznate su visine svih učenika jedne škole. Napiši program koji određuje najvišeg dečaka i najvišu devojčicu u toj školi, određuje ko je od njih viši i ispisuje razliku njihovih visina.

Ulaz

Sa standardnog ulaza unosi se broj učenika (5 ≤ n ≤ 100), a zatim u svakom od n narednih redova podaci za po jednog učenika. Za svakog učenika unosi se visina (ceo broj između 120 i 200) i oznaka pola (m za muški i z za ženski pol), razdvojeni jednim razmakom. Pretpostaviti da postoji bar jedan dečak i bar jedna devojčica.

Izlaz

Ako je najviša devojčica viša od najvišeg dečaka, na standardni izlaz ispisati z, razmak i zatim za koliko je viša. Ako je najviši dečak viši od najviše devojčice, ispisati m, razmak i zatim za koliko je viši. Ako su iste visine, ispisati samo =.

Primer

Ulaz

5
152 z
174 m
165 z
172 m
170 z

Izlaz

m 4
Objašnjenje

Najviši dečak je visok 174, a najviša devojčica 170, pa je dečak viši za 4.

Uputstvo i rešenja

ZADATAK 09 2019.

Knjiga

Državno takmičenje 6. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Petlje u C/C++

Postavka zadatka

Nizom a date su dužine n poglavlja jedne knjige. Elementom a0 dat je broj stranica za prvo poglavlje, elementom a1 za drugo i tako redom. Potrebno je knjigu podeliti na dva dela, tako da se ukupni brojevi strana u ta dva dela najmanje razlikuju. Podela se vrši iza nekog od poglavlja. Ako postoje dve moguće podele sa istom najmanjom razlikom, podela se vrši nakon ranijeg od dva poglavlja (tako da prvi deo bude kraći). Napiši program koji određuje nakon kog poglavlja treba izvršiti podelu.

Ulaz

U prvoj liniji standardnog ulaza nalazi se prirodan broj n (1 < n ≤ 50000). U sledećih n linija nalazi se po jedan prirodan broj (između 1 i 1000) – brojevi stranica svakog poglavlja.

Izlaz

Na standardnom izlazu prikazati u jednoj liniji redni broj poglavlja (poglavlja se broje od nule) posle kog treba izvršiti podelu knjige.

Primer

Ulaz

5
100
120
50
150
70

Izlaz

1
Objašnjenje

Kada se podela izvrši posle poglavlja broj 1 (to je drugo poglavlje), prvi deo knjige sadrži 220, a drugi 270 strana, što daje najmanju moguću razliku od 50 strana. Podela posle poglavlja broj 2 (treće poglavlje) takođe bi dala razliku 50 (270 i 220), ali po uslovima zadatka tada se bira da prvi deo knjige bude kraći, pa je rešenje 1.

Analiza zadatka

Neka je levo[i] broj strana u poglavljima od 0 do i, a desno[i] broj strana u svim poglavljima posle poglavlja i. Za primer iz zadatka dobijamo:

i01234
poglavlje a[i]1001205015070
levo[i]100220270420490
desno[i]390270220700
desno[i] − levo[i]29050−50−350−490

Traži se podela za koju je apsolutna vrednost poslednjeg reda najmanja. Vrednosti se smanjuju do prelaska iz pozitivnih u negativne, a posle toga rastu po apsolutnoj vrednosti, pa je minimum uvek oko tog prelaza. Kada su dve vrednosti jednake po apsolutnoj vrednosti (kolone 1 i 2), uzima se ranija.

Uputstvo i rešenja

ZADATAK 10 2019.

Rastuće cifre

Državno takmičenje 6. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Postavka zadatka

Napiši program koji među unetim brojevima pronalazi one kojima su cifre strogo rastuće, gledajući od cifre najveće težine (prve cifre sleva).

Ulaz

Sa standardnog ulaza učitava se broj N (1 ≤ N ≤ 5000), a zatim i N prirodnih brojeva većih ili jednakih 10 i manjih ili jednakih 109, svaki u posebnom redu.

Izlaz

Na standardni izlaz ispisati tražene brojeve sa rastućim ciframa, svaki u posebnom redu.

Primer

Ulaz

3
123
222
321

Izlaz

123

Uputstvo i rešenja

ZADATAK 11 2019.

Razlika visina

Državno takmičenje 6. razred

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Petlje u C/C++ Binarna pretraga

Postavka zadatka

U jednoj školi biraju se glumci za školsku predstavu u kojoj likovi koje tumače imaju veliku razliku u visini. Napiši program koji određuje na koliko načina možemo da odaberemo dva glumca iz odeljenja tako da im je razlika visina jednaka datom broju r.

Ulaz

Sa standardnog ulaza unosi se prvo pozitivan prirodan broj r (1 ≤ r ≤ 1000), u narednom redu broj učenika n (1 ≤ n ≤ 50000), a nakon toga u narednih n redova visina svakog učenika (broj između 1 i 100000).

Napomena. U 20 od 25 test-primera sva deca će biti različite visine.

Izlaz

Na standardni izlaz ispisati broj parova koje je moguće formirati.

Primer 1

Ulaz

10
5
150
160
165
170
175

Izlaz

3
Objašnjenje

Moguće je napraviti parove od prvog i drugog deteta (150, 160), od drugog i četvrtog deteta (160, 170) i trećeg i petog deteta (165, 175).

Primer 2

Ulaz

23
5
157
180
157
162
134

Izlaz

4
Objašnjenje

Moguće je napraviti parove od prvog i drugog deteta (157, 180), od petog i prvog (134, 157), od drugog i trećeg (157, 180) i od petog i trećeg deteta (134, 157).

Analiza zadatka

Ako se visine učitaju kao niz, dobro je prvo ga sortirati. Za svaki par visina treba proveriti da li im je razlika jednaka r. To se može uraditi sa dve ugnježdene petlje ili efikasnije, tako što se za fiksiranu prvu visinu druga traži binarnom pretragom, ili tako što se visine unapred prebroje.

Uputstvo i rešenja

Državno takmičenje iz 2018

ZADATAK 12 2018.

Kupovina

Državno takmičenje razred nije naveden

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Petlje u C/C++

Postavka zadatka

Poznate su sve cene predmeta koji se prodaju u jednoj prodavnici. Kupac ima na raspolaganju određeni iznos dinara i želi da kupi što skuplje predmete. Redom uzima predmete počev od najskupljeg, dok ima novca. Ako nema novca za najskuplji, uzima najskuplji za koji ima novca.

Napomena. Ova strategija ne garantuje da će predmeti koje kupac kupi biti ukupno najveće moguće vrednosti (na primer, ako ima 5 dinara i ako su cene predmeta 4, 3 i 2 dinara, kupiće samo predmet od 4 dinara, a mogao bi da kupi predmete od 3 i 2 dinara).

Napiši program koji određuje koliko novca kupcu preostaje nakon kupovine na opisani način.

Ulaz

U prvoj liniji standardnog ulaza nalazi se iznos novca (ceo broj) koji ima kupac, u drugoj broj predmeta N (prirodan broj manji od 50000), a zatim se u narednoj liniji unose redom cene predmeta, razdvojene razmacima.

Izlaz

Na standardni izlaz ispisati preostali iznos novca nakon kupovine na opisani način.

Primer 1

Ulaz

1250
5
1010 357 725 1125 115

Izlaz

10
Objašnjenje

Kupac kupuje predmet od 1125 (preostaje 125), zatim ne može da kupi 1010, 725 i 357, a predmet od 115 kupuje (preostaje 10).

Primer 2

Ulaz

10000
6
3010 3005 5725 1265 2075 385

Izlaz

0

Analiza zadatka

Algoritam zadatka prikazan je na slici. Niz sa cenama sortira se po opadajućem redosledu. Ostatak je na početku jednak novcu kojim kupac raspolaže. Zatim se niz obilazi redom: ako je cena predmeta manja ili jednaka tekućem ostatku, predmet se „kupuje“, tj. cena se oduzima od ostatka. Inače se predmet preskače.

Priprema za državna takmičenja 2018: zadatak „Kupovina“ – algoritam
Slika 1: Priprema za državna takmičenja 2018: zadatak „Kupovina“ – algoritam

Uputstvo i rešenja

ZADATAK 13 2018.

Binarni nizovi

Državno takmičenje razred nije naveden

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Rekurzivni algoritmi

Postavka zadatka

Napisati program kojim se prikazuju svi binarni nizovi (nizovi koji sadrže samo nule i jedinice) dužine n koji ne sadrže dve uzastopne jedinice. Nizove prikazati u leksikografskom poretku (tako da su binarni brojevi formirani od tih nizova poređani rastuće).

Ulaz

Prva linija standardnog ulaza sadrži prirodan broj n (n ≤ 10).

Izlaz

Na standardnom izlazu prikazati tražene binarne nizove u leksikografskom poretku, svaki niz u posebnoj liniji.

Primer

Ulaz

3

Izlaz

000
001
010
100
101

Analiza zadatka

Zadatak se može rešiti upotrebom rekurzivne funkcije koja formira binarne nizove. Funkcija ima jedan parametar – redni broj pozicije i koju trenutno popunjavamo. Ako je početna vrednost i = 0, sledeći poziv ima i = 1 itd.

U svakom pozivu na poziciju i pokušavamo da upišemo nulu i da upišemo jedinicu. Nula se može upisati uvek. Jedinica se sme upisati samo ako prethodni element nije jedinica (po uslovu zadatka ne smeju postojati dve uzastopne jedinice). U oba slučaja funkciju pozivamo za sledeću poziciju i + 1. Kada se dođe do i = n, niz je potpun i ispisuje se. Pošto se uvek prvo upisuje nula, pa tek onda jedinica, nizovi se dobijaju u leksikografskom poretku.

Priprema za državna takmičenja 2018: zadatak „Binarni nizovi“ – algoritam
Slika 2: Priprema za državna takmičenja 2018: zadatak „Binarni nizovi“ – stablo rekurzivnih poziva

Uputstvo i rešenja

ZADATAK 14 2018.

Akcije

Državno takmičenje razred nije naveden

Izvor zadatka: dms.rs/informatika-osnovne-skole

Potrebno predznanje: Petlje u C/C++

Postavka zadatka

Vrednost akcija jedne kompanije varirala je iz dana u dan tokom jednog dužeg vremenskog perioda. Napiši program koji određuje koliko ima nizova uzastopnih dana u kojima je ukupan zbir promena vrednosti akcija jednak datom broju z.

Ulaz

Sa standardnog ulaza se u prvoj liniji unosi broj z (ceo broj između −10000 i 10000), zatim, u narednoj liniji, broj dana n u kojima se pratila promena vrednosti akcija (3 ≤ n ≤ 50000) i zatim, u narednoj liniji, promene za svaki od dana u odnosu na prethodni dan (celi brojevi između −100 i 100) razdvojeni razmacima.

Izlaz

Na standardni izlaz ispisati broj perioda u kojima je ukupna promena jednaka z (tj. broj nepraznih segmenata niza promena čiji je zbir jednak z).

Primer

Ulaz

11
10
1 2 3 5 1 -1 1 5 3 2

Izlaz

7
Objašnjenje

Sledeći segmenti imaju zbir 11: (1 2 3 5), (1 2 3 5 1 −1), (2 3 5 1), (2 3 5 1 −1 1), (5 1 −1 1 5), (1 −1 1 5 3 2), (1 5 3 2).

Analiza zadatka

Najjednostavnije je proveriti svaki segment (dve petlje), ali je to O(n²), što je za n = 50000 oko 1,25 milijardi sabiranja. Efikasnije se rešava pomoću prefiksnih zbirova.

Uputstvo i rešenja

Državno takmičenje iz 2016. godine

ZADATAK 15 2016.

Deljivi

Državno takmičenje 7. i 8. razred (2. kategorija)

Izvor zadatka: dms.rs/informatika-osnovne-skole

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

Postavka zadatka

U svakom zadatku vremensko ograničenje je 1 sekunda, a memorijsko ograničenje je 64 MB.

Data su dva cela broja a, b (0 < a < b < 1015) i ceo broj c (1 < c < 1015). Napisati program (konzolnu aplikaciju) DELJIVI koji će ispisati koliko celih brojeva između a i b (uključujući a i b) je deljivo datim brojem c.

Ulaz

U prvom redu standardnog ulaza dat je prirodan broj a, u drugom redu prirodan broj b, a u trećem redu prirodan broj c.

Izlaz

U jedinom redu standardnog izlaza ispisati traženi broj.

Primer 1

Ulaz

8
40
5

Izlaz

7
Objašnjenje

Brojevi deljivi sa 5 su 10, 15, 20, 25, 30, 35 i 40.

Primer 2

Ulaz

8
40
8

Izlaz

5

Primer 3

Ulaz

8
1234567890
8

Izlaz

154320986

Analiza zadatka

Najjednostavnije rešenje je da se u petlji proveri deljivost svakog broja od a do b sa c. To nije dovoljno efikasno (zbog vremenskog ograničenja ne prolazi sve test primere). Nešto bolje je da se, kada se naiđe na prvi broj deljiv sa c, dalje ide u koracima od c. Najefikasnije je da se broj deljivih odredi formulom.

Uputstvo i rešenja

Državno takmičenje 2024

Zadaci su preuzeti sa petlje, sa web lokacije takprog.petlja.org. Da biste proverili rešenja, ulogujte se na petlju i kliknite na link za određen razred.

ZADATAK 16 2024.

Teške torbe

Državno takmičenje razred nije naveden

Izvor zadatka: takprog.petlja.org – zadaci osnovnih škola

Potrebno predznanje: Rekurzivni algoritmi

Postavka zadatka

Dva mala putnika imaju ukupno četiri teške torbe. Svaki od putnika može da ponese najviše dve torbe, po jednu u svakoj ruci. Sve torbe su zajedničke i bilo koji putnik može da nosi bilo koju torbu. U slučaju da su im torbe preteške, naši putnici žele da koriste što manje tuđe pomoći. Poznata je težina svake torbe, kao i najveći teret koji može da ponese svaki od putnika. Potrebno je odrediti najmanju ukupnu težinu torbi koje oni ne mogu da ponesu.

Ulaz

U prvom redu standardnog ulaza su četiri prirodna broja razdvojena po jednim razmakom – težine torbi. U drugom redu su dva prirodna broja razdvojena jednim razmakom – težine koje mogu da ponesu mali putnici. Svi brojevi su manji od 1000.

Izlaz

Na standardni izlaz ispisati jedan neoznačen ceo broj – najmanju ukupnu težinu torbi za koje je putnicima potrebna pomoć.

Primer 1

Ulaz

1 2 3 4
5 6

Izlaz

0
Objašnjenje

Jedan putnik može da ponese torbe težina 1 i 4, a drugi torbe težina 2 i 3, tako da im nije potrebna pomoć.

Primer 2

Ulaz

2 3 4 5
5 6

Izlaz

3
Objašnjenje

Jedan putnik može da ponese torbu težine 5, a drugi torbe težina 2 i 4, pa im je potrebna pomoć za torbu težine 3.

Primer 3

Ulaz

12 20 15 17
17 14

Izlaz

35

Primer 4

Ulaz

99 56 34 22
3 4

Izlaz

211
Objašnjenje

Nijedna torba nije dovoljno laka za putnike, pa je potrebna pomoć za sve torbe: 99 + 56 + 34 + 22 = 211.

Primer 5

Ulaz

7 5 4 2
7 9

Izlaz

2
Objašnjenje

Prvi putnik nosi torbu težine 7, a drugi torbe težina 5 i 4 (ukupno 9). Ostaje torba težine 2.

Uputstvo i rešenja

Dodatna analiza zadatka
ZADATAK 17 2024.

Kvantna zavrzlama

Državno takmičenje 7. razred

Izvor zadatka: takprog.petlja.org – zadaci osnovnih škola

Potrebno predznanje: Petlje u C/C++ Grananje u programu

Postavka zadatka

Đole je kvantni fizičar koji je osmislio eksperiment u okviru svojih doktorskih studija. Đole pokušava da određenu česticu dovede u stabilan položaj na sobnoj temperaturi. Da bi proverio da li je uspeo, on meri brzinu te čestice tokom vremena. Da bi se smatralo da je čestica u stabilnom stanju, njena brzina mora tokom nekih k uzastopnih trenutaka da osciluje, tj. da se tokom tih k trenutaka brzina naizmenično povećava i smanjuje. Đole je sjajan fizičar, ali nije tako dobar programer i zamolio je vas da na osnovu niza merenja odredite da li je eksperiment uspeo.

Ulaz

U prvom redu standardnog ulaza nalaze se dva prirodna broja n i k (2 ≤ k ≤ n ≤ 106). U drugom redu nalazi se n pozitivnih realnih brojeva razdvojenih razmacima. Ovi brojevi predstavljaju brzine čestice u svakom od n trenutaka koliko traje eksperiment.

Izlaz

U prvom redu standardnog izlaza ispisati da ili ne (malim latiničnim slovima), u zavisnosti od toga da li je eksperiment uspeo. U drugom redu ispisati dužinu najdužeg podniza trenutaka u kome je brzina čestice oscilovala.

Primer 1

Ulaz

12 7
2.7 3.7 6.9 7.8 4.3 17.11 2.6 5.8 5.9 4.1 7.9 6.2

Izlaz

ne
6
Objašnjenje

U nizu brzina ne postoji podniz od 7 uzastopnih elemenata u kome brzina osciluje. Najduži takav podniz ima 6 elemenata: 6.9, 7.8, 4.3, 17.11, 2.6, 5.8.

Primer 2

Ulaz

10 4
6.8 5.3 4.1 9.17 3.7 2.1 1.0 9.9 17.64 2.1

Izlaz

da
4
Objašnjenje

Podniz uzastopnih trenutaka 5.3, 4.1, 9.17, 3.7 ispunjava traženi uslov.

Primer 3

Ulaz

7 4
2.2 7.5 3.5 3.5 5.7 9.9 10.0

Izlaz

ne
3
Objašnjenje

U nizu ne postoji podniz od 4 uzastopna elementa u kome brzina osciluje. Podniz 2.2, 7.5, 3.5, 3.5 ne ispunjava uslov jer su poslednja dva elementa jednaka.

Uputstvo i rešenja

ZADATAK 18 2024.

Patikarnica

Državno takmičenje 7. razred

Izvor zadatka: takprog.petlja.org – zadaci osnovnih škola

Potrebno predznanje: Vektori Mape u C++ Binarna pretraga

Postavka zadatka

Popularna prodavnica patika, Patikarnica, odlučila je da svojim kupcima ponudi novu uslugu. Na ulazu u Patikarnicu biće postavljen ekran osetljiv na dodir koji će kupcima predlagati najskuplje modele patika koje se uklapaju u budžet koji su planirali da izdvoje za nove patike. Patikarnica je kupila svu neophodnu opremu da bi korisnicima pružila novu uslugu, ali je zamolila nas da napišemo program koji će na osnovu dostupnih patika u prodavnici i novca koji je kupac spreman da izdvoji prikazati spisak najskupljih modela patika koje kupac može da priušti.

Patikarnica na stanju ima n različitih modela patika opisanih svojim imenom i cenom. Tokom dana u Patikarnicu ulazi k kupaca. Svaki kupac na ulazu unosi količinu novca x koju želi da izdvoji za nove patike i sistem mu prikazuje spisak najskupljih patika koje može da priušti.

Ulaz

U prvom redu učitava se broj n (1 ≤ n ≤ 105) različitih modela patika u ponudi Patikarnice, zatim se u n narednih redova učitava naziv modela patika (niska maksimalne dužine 200 karaktera) i njegova cena (prirodan broj manji od 50000). Nakon toga učitava se broj k (1 ≤ k ≤ 106) kupaca koji su ušli u prodavnicu, a zatim u k sledećih redova budžeti xi (1 ≤ i ≤ k) pojedinačnih kupaca (prirodni brojevi manji od 50000).

Izlaz

Na standardni izlaz za svakog od k kupaca i njihove budžete xi ispisati leksikografski sortiran spisak najskupljih patika koje mogu da priušte (naziv i cena, u istom redu). U slučaju da ne postoje patike koje kupac može da priušti, ispisati nisku nema.

Primer

Ulaz

10
NikeAirMaxIVO 16799
AsicsMetaspeedSky+ 29999
NikeVaporFly3 32899
AsicsSkzElite 17199
NikeAirMax90 20699
NikeJordanMaxAura5 17199
NikeStreakFly 13999
Adidas4DFWD3 25999
AdidasUltraBoostLight 16799
AdidasXPLRBoost 17199
2
18000
12000

Izlaz

AdidasXPLRBoost 17199
AsicsSkzElite 17199
NikeJordanMaxAura5 17199
nema
Objašnjenje

Prvi kupac je kao svoj budžet uneo iznos od 18000 dinara i najskuplje patike koje može da priušti su AdidasXPLRBoost, AsicsSkzElite i NikeJordanMaxAura5 po ceni od 17199 dinara. Drugi kupac je uneo budžet od 12000 dinara i u ponudi nema patika koje može da priušti, pa se kao rezultat štampa reč nema.

Uputstvo i rešenja

ZADATAK 19 2024.

Rotator slova

Državno takmičenje 7. razred

Izvor zadatka: takprog.petlja.org – zadaci osnovnih škola

Potrebno predznanje: Funkcije

Postavka zadatka

Kada se pritisne taster na tastaturi, prvo slovo svake reči u tekstu premešta se na poslednje mesto te reči. Koliko je puta potrebno pritisnuti taster da bi se rečenica vratila u početno stanje?

Ulaz

Sa standardnog ulaza učitava se jedna linija teksta koja je sastavljena od malih slova engleske abecede i razmaka i ima najviše 106 karaktera. Svi primeri su takvi da se rečenica vraća u prvobitno stanje nakon najviše 1018 pritisaka tastera.

U 50% test-primera reči nisu periodične. U 60% test-primera sve reči su kraće od 100 karaktera.

Izlaz

Na standardni izlaz ispisati najmanji broj pritisaka tastera (veći od 0) potrebnih da se rečenica vrati u prvobitno stanje.

Primer 1

Ulaz

mala sirena zivi na dnu mora

Izlaz

12
Objašnjenje

Pritiscima tastera dobijaju se naredne rečenice: mala sirena zivi na dnu mora, alam irenas iviz an nud oram, lama renasi vizi na udn ramo, amal enasir iziv an dnu amor, mala nasire zivi na nud mora, ..., i posle 12 pritisaka dobija se početna rečenica.

Primer 2

Ulaz

sestaci sedmaci i osmaci vole informatiku

Izlaz

924

Primer 3

Ulaz

dada tata i mama

Izlaz

2

Uputstvo i rešenja

Dodatna analiza zadatka

Državno takmičenje 2023

Zadaci su preuzeti sa petlje, sa web lokacije takprog.petlja.org. Da biste proverili rešenja, ulogujte se na petlju i kliknite na link za određen razred.

ZADATAK 20 2023.

Parno-neparni nizovi

Državno takmičenje 7. razred

Izvor zadatka: takprog.petlja.org – zadaci osnovnih škola

Potrebno predznanje: Petlje u C/C++ Ugnježdene petlje u C/C++

Postavka zadatka

Niz je pnpn (parno-neparno-parno-neparno...) ako se na parnim pozicijama u nizu (0, 2, 4, ...) nalaze isključivo parni, a na neparnim pozicijama u nizu (1, 3, 5, ...) isključivo neparni brojevi. Napiši program koji za nekoliko učitanih nizova proverava da li su pnpn nizovi.

Ulaz

Sa standardnog ulaza učitavaju se brojevi n (5 ≤ n ≤ 100) i k (5 ≤ k ≤ 100), a zatim iz n narednih redova n nizova od po k elemenata čija je vrednost između 0 i 1000.

Izlaz

Za svaki od učitanih nizova na standardni izlaz ispisati da ako zadovoljava uslov, a u suprotnom ne.

Primer

Ulaz

3 5
1 2 3 4 5
2 3 4 5 6
4 7 0 9 2

Izlaz

ne
da
da
Objašnjenje

U prvom nizu se na poziciji 0, koja je parna, nalazi broj 1, koji je neparan. U drugom nizu se na parnim pozicijama nalaze brojevi 2, 4 i 6, koji su parni, a na neparnim pozicijama brojevi 3 i 5, koji su neparni. U trećem nizu se na parnim pozicijama nalaze brojevi 4, 0 i 2, koji su parni, a na neparnim pozicijama brojevi 7 i 9, koji su neparni.

Uputstvo i rešenja

Dodatna analiza zadatka
ZADATAK 21 2023.

Prevod

Državno takmičenje 7. razred

Izvor zadatka: takprog.petlja.org – zadaci osnovnih škola

Potrebno predznanje: Mape u C++

Postavka zadatka

Napiši program koji implementira srpsko-engleski rečnik. Prvo se učitava spisak reči i njihovih prevoda, a zatim korisnik od sistema traži da mu se prevedu neke reči (bilo sa srpskog na engleski, bilo sa engleskog na srpski).

Ulaz

Sa standardnog ulaza unosi se broj n (1 ≤ n ≤ 50000) parova reči na engleskom i srpskom jeziku (u svakom redu prvo engleska, a zatim srpska reč, kao u primeru). Sve reči na srpskom su međusobno različite i sve reči na engleskom su međusobno različite. Nakon toga unosi se m (1 ≤ m ≤ 50000) upita. Svaki upit sadrži željeni jezik (sr ili en) i zatim reč na suprotnom jeziku koju treba prevesti.

Izlaz

Na standardni izlaz ispisati sve prevode. Ako za neku reč nije unet prevod, ispisati ?.

Primer

Ulaz

3
cat macka
dog pas
mouse mis
4
en pas
sr mouse
sr lion
en mis

Izlaz

dog
mis
?
mouse
Objašnjenje

Upit en pas traži prevod srpske reči pas na engleski: dog. Upit sr mouse traži prevod engleske reči mouse na srpski: mis. Za reč lion nema prevoda.

Uputstvo i rešenja

Kviz: proveri svoje znanje

Kviz – priprema za državno takmičenje

1. Koji elementi matrice a[3][3] čine sporednu dijagonalu?

2. Kako se u zadatku „Prašuma“ najlakše učitavaju cifre napisane bez razmaka (npr. 123)?

3. Koji brojevi imaju neparan broj delilaca?

4. Zašto u zadatku „Mesto K-tog pojavljivanja broja“ koristimo long long?

5. Šta je neophodno da bi binarna pretraga radila ispravno?

6. Koliko je celih brojeva deljivih sa c u intervalu [a, b]?

7. U zadatku „Akcije“ segment ima zbir z. Šta se traži kod prefiksnih zbirova P?

8. Kako se u zadatku „Rotator slova“ dobija konačan odgovor za celu rečenicu?

9. U zadatku „Binarni nizovi“ dozvoljeno je upisati jedinicu na poziciju i samo ako…

10. Zašto strategija iz zadatka „Kupovina“ (uvek uzmi najskuplje što možeš) ne daje uvek najbolje?

11. Kako se u zadatku „Dinosaurus Dino“ ubrzava odgovaranje na pitanja kada su poeni sortirani?

12. U zadatku „Prevod“ šta je dobar izbor za čuvanje parova reč → prevod?