OKRUŽNA TAKMIČENJE IZ INFORMATIKE - ZADACI
Takođe, možete prethodno uraditi zadatke sa kvalifikacija za okružna takmičenja
OKRUŽNO TAKMIČENJE IZ INFORMATIKE - 2016
dms.rs/informatika-osnovne-skole/
1. Proizvod
Ulaz:
795
Izlaz:
665
Ulaz:
100
Izlaz:
0
Ulaz:
105
Izlaz:
50
#include < iostream >
using namespace std ;
int main()
{
int N, a, b, P=1, P2=1;
cin >> N;
a=N/10;
b=N%10;
P=a*b;
a=N/100;
b=N%100;
P2 = a*b;
if(P > P2){
cout << P << endl;
}
else{
cout << P2 << endl;
}
return 0;
}
2. Konkurs
Na standardnom ulazu se u jednom redu zadaju tri para prirodnih brojeva (koji nisu veći od 1000). Prvi par brojeva čine dve ocene za prvog programera, drugi par brojeva su ocene za drugog programera, treći par brojeva čine dve ocene za trećeg programera.
Primer 1
Izlaz
Na standardnom izlazu se ispisuje jedno od slova A, B ili C, u zavisnosti od toga koji programer je pobednik. Slovo A se ispisuje ako je pobedio prvi programer, slovo B se ispisuje ako je pobedio drugi programer, slovo C se ispisuje ako je pobedio treći programer.
Ulaz:
5 6 7 4 5 3
Izlaz:
B
Primer 2
Ulaz:
14 18 17 7 18 7
Izlaz:
B
#include < iostream >
using namespace std ;
int main()
{
int A1,A2,A3,B1,B2,B3,Z1,Z2,Z3;
scanf("%d%d",&A1,&B1);
scanf("%d%d",&A2,&B2);
scanf("%d%d",&A3,&B3);
Z1=A1+B1;
Z2=A2+B2;
Z3=A3+B3;
if(Z1 > Z2 && Z1 > Z3){
printf("%c",'A');
}
else if(Z2 > Z1 && Z2 > Z3){
printf("%c",'B');
}
else if(Z3>Z2 && Z3 > Z1){
printf("%c",'C');
}
else if(Z1==Z2 && Z1 > Z3){
printf("%c",'A');
}
else if(Z2 > Z1 && Z2 == Z3){
printf("%c",'B');
}
else if(Z3 > Z2 && Z3 == Z1){
printf("%c",'C');
}
return 0;
}
3. Lepota
U prvoj liniji standardnog ulaza data su dva cela broja m i n razdvojeni blanko karakterom.
Izlaz
Na standardnom izlazu ispisati jedan ceo broj koji predstavlja broj prelepih brojeva u datom segmentu.
Ograničenja
0 ≤ m ≤ n ≤ 10 000 000
Primer
Ulaz
90 91
Izlaz
2
Za svaki broj između m i n izvršiti proveru da li je broj "lep", tj. da li je sa svim ciframa međusobno različitim. Napraviti posebnu metodu za proveru. U for petlji menjati brojeve u intervalu od m do n i vršiti za svaki broj proveru, pozivanjem prethodno napravljene metode. Ako metoda "provera" vrati tačno onda povećati vrednost brojača za 1. Brojač je celobrojna promenljiva čija se vrednost prikazuje na izlazu.
Metoda za proveru:
Koristiti ugnježdene petlje. Unutar spoljnje menjati broj za proveru, tako što je u početnom ciklusu broj za proveru jednak početnom, a u svakom narednom broj je skraćen za jednu cifru sa desne strane. Npr. ako je početni broj 123345, u 1. ciklusu analiziramo taj broj, u 2. ciklusu broj za analizu 12334, u 3. 1233 itd. Cifra sa desne strane može se ukloniti deljenjem sa 10.
Unutrašnja petlja:
Broj koji analiziramo podelimo na dva dela, cifra desno i ostatak broja. Npr. 123345 delimo na cifru 5 i ostatak 12334. Dalje kroz petlju poredimo u svakom ciklusu tu cifru sa ciframa broja 12334 i to s desna na levo. Cifru izvlašimo iz broja koristeći ostatak deljenja sa 10 npr. cifra=12334%10, a zatim skratimo broj sa 10, tako da u sledećem ciklusu bude 12334/10 = 1233. Petlja traje sve dok ostatak bude veći od 0.
#include < iostream >
using namespace std ;
bool proveri(long int n)
{
bool r=true;
long int br1,cif;
long int br=n;
while(br != 0)
{
br1=br/10;
cif=br%10;
while(br1!=0)
{
long int cifI=br1%10;
if(cifI==cif)
{
r=false;
}
br1=br1/10;
}
if(!r){
break;
}
br=br/10;
}
return r;
}
int main()
{
long int m,n,p=0; cin >> m >> n;
if(m==n && m==0)
{
p=0;
}
for(int i=m; i<=n; i++)
{
if(proveri(i))
{
p++;
}
}
cout << p << endl;
return 0;
}
OKRUŽNO TAKMIČENJE IZ INFORMATIKE - 2019
dms.rs/informatika-osnovne-skole/
4. Sastanak
Pet programera tokom jednog dana boravi u firmi. Ako se za svakog od njih zna sat i minut dolaska i sat i minut odlaska napiši program koji određuje da li je moguće da organizuju zajednički sastanak (na kome moraju svi biti prisutni) i ako je moguće, koliko je najduže trajanje takvog sastanka (u satima i minutima).
Ulaz
Svaki od pet redova standardnog ulaza sadrži četiri cela broja razdvojena sa po jednim razmakom (sat i minut dolaska i sat i minut odlaska programera).
Izlaz
Na standardni izlaz ispisati vreme sastanaka tako da su broj sati i minuta razdvojeni jednim razmakom ili reč ne ako sastanak nije moguće održati.
Primer 1
Ulaz
8 15 16 30
9 40 17 15
9 20 14 30
8 45 16 45
9 15 15 20
Izlaz
4 50
Primer 2
Ulaz
7 30 12 30
7 48 13 29
12 28 19 12
12 33 17 37
11 36 18 51
Izlaz
ne
5. Brodovi
Transportna kompanija uspostavlja brodske vožnje između matične luke i nekoliko (najviše 5) drugih lučkih gradova. Na svakoj od tih linija cirkuliše tačno jedan brod tako što kreće iz matične luke, prevozi putnike do svog odredišta, a zatim druge putnike vraća nazad u svoju matičnu luku.
Ako svi brodovi iz matične luke kreću istovremeno i ako je za svaki od njih poznato koliko mu je dana potrebno da otputuje i da se vrati nazad u svoju matičnu luku (pretpostvalja se da se svaki transport i povratak obavlja unutar jedne kalendarske godine), napiši program koji određuje posle koliko dana će se svi brodovi ponovo susresti u matičnoj luci (obrati pažnju na to da iako rešenje uvek postoji, ono može biti veoma veliki broj).
Ulaz
Sa standardnog ulaza se unosi broj linija (najviše 5), a zatim za svaku od linija broj
dana potrebnih da brod optutuje i da se vrati.
Izlaz
Na standardni ulaz ispisati traženi broj.
Primer
Ulaz
3
15
24
60
Izlaz
120
6. Decimale
Napiši program koji izračunava i ispisuje količnik prirodnih brojeva m i n) manjih od milion, sa datim brojem decimala k (1 ≤ k ≤ 1000). Ne vršiti zaokrugljivanje rezultata (samo odseći decimale iza poslednje tražene). Sa standardnog liniji se redom učitavaju k, m i n (svaki u posebnom redu). Rezultat prikazati sa decimalnim zarezom (ne decimalnom tačkom).
Primer 1
Ulaz
20
1
7
Izlaz
0,14285714285714285714
Primer 2
Ulaz
7
1
2
Izlaz
0,5000000
Učitati broj decimala k, deljenik m i delilac n
Naći količnik m/n kao realan broj
Izdvojiti celobrojni deo u novu promenljivu kastovanjem(pretvaranjem u int tip).
Odštampati celobrojni deo, a zatim i ",".
Pre petlje postaviti početnu vrednost moda da bude jednaka ostatku deljenja n i m
U petlji koja ima ciklusa onoliko koliko ima decimala uraditi sledeće:
Pomnožiti ostatak deljenja(mod) sa 10 i smestiti u promenljivu npr x,
Izračunati i ostatak deljenja tog broja i n i to će biti novi mod za sledeći ciklus.
Izračunati rezultat deljenja x i n štampati kao sledeću cifru koja ide posle decimalnog zareza u broju.
#include < stdio.h>
int main()
{
double kol;
scanf("%d%d%d",&k,&m,&n);//20,1,7
kol=(double)m/n;//0,14285714285714285714
ceo=(int)kol;//0
printf("%d",ceo);
printf(",");
int x=m,mod;//1
mod = x % n;//1
for(int i = 0;i < k;i++){
mod = x % n;//3;2;6;4
x = x/n;//x=10/7=1;x=30/7=4;x=20/7=2;8...
printf("%d",x);//1;4;2;8...
return 0;
7. Skrivene šifre
jedan broj. Strućnjaci za šifrovanje su došli do zaključka da broj predstavlja niz šifara za pristup nekim računarima. Svaka šifra sadrži
samo cifre od 0 do 5, kraj šifre označava cifra 6 ili kraj broja, a cifre 7, 8 i 9 se koriste za maskiranje i treba ih ignorisati. Na ovaj način hakeri u jednom broju mogu da pošalju i po nekoliko šifara, pri čemu broj 0 nemože biti šifra.
Napisati program koji za uneti broj K ispisuje šifre, bez obzira na redosled, koje su u njemu skrivene i koliko se šifara u tom broju nalazi.
Primer:
Ulaz:
K = 23675
Izlaz:
Sifre su: 5 23
Poslate su 2 sifre
Ostala okružna takmičenja-kombinovano
8. GrupaOS
Potrebno predznanje: operatori, selekcije
prvom kolu u grupi O.S. igrale su tri ekipe čije su oznake bili brojevi 1, 2 i 3. Prvu rundu su odigrale ekipe sa oznakama 1 i 2 i zabeleženi su njihovi ostvareni poeni (za ekipu 1 kao R11 i za ekupu 2 kao R12), u drugoj rundi su igrale ekipe 1 i 3 (njihovi poeni su redpm R21 i R23), a potpm su igrale ekipe 2 i 3 (njihovi poeni su redom R32 i R33). U odigranoj rundi pobeđuje ona ekipa koja ima više poena. Ukpliko u nekoj rundi ekipe imaju izjednačen broj poena ne računa se pobeda ni jednoj ekipi. Nakon odigrane sve tri runde, određuje se pobednik kola.
Pobednik je ona ekipa koja ima najveći brpj pobeda. Ukpliko dve ekipe imaju jednak broj pobeda, koji je veći od broja pobeda treće ekipe, ili ukoliko su sve tri ekipe izjednačene, igraju je dodatne partije koje nose oznaku DP. Napisati program GRUPAOS u kome se unose redom vrednosti R11, R12, R21, R23, R32 i R33, a zatim se određuje i ispisuje koja je ekipa pobednik ili se ispisuje da se igraju dodatne partije DP.
Primer 1.
Ulaz:
R11 = 56 R12 = 254 R21 = 104 R23 = 198 R32 = 156 R33 = 148
Izlaz:
2
Primer 1.
Ulaz:
R11 = 156 R12 = 154 R21 = 104 R23 = 104 R32 = 256 R33 = 137
Izlaz: DP
Učitati broj osvojenih poena po rundi i ekipi. Npr R11 - broj poena u prvoj rundi za prvu ekipu. R23 je npr. broj osvojenih ekipa u drugoj rundi treće ekipe.
Uvesti poene po ekipi i inicijalizovati na vrednost nula.
Koristiti selekcije da se odredi koja je ekipa u određenoj rundi osvojila više poena i njoj povećati broj poena za 1.
Kada se ovo odredi za sve odigrane partije, upotrebiti novu selekciju(grananje u programu) da bi se uporedili poeni.
Ako je broj poena izjednačen štampati "DP" na ekranu.
U ostalim slučajevima štampati redni broj ekipe sa najviše osvojenih poena.
using namespace std;
/*Rešenje za programski jezik C++ */
int main()
{
int R11,R12,R21,R23,R32,R33,P1 = 0,P2 = 0,P3 = 0;
cin >> R11 >> R12 >> R21 >> R23 >> R32 >> R33;
/* Određuje se broj poena u prvoj rundi */
if(R11 > R12)
{
else if(R11 < R12)
{
/* Određuje se broj poena u drugoj rundi */
if(R21 > R23)
{
else if(R21 < R23)
{
/* Određuje se broj poena u trećoj rundi */
if(R32 > R33)
{
else if(R32 < R33)
{
/* Određuje se ekipa koja je pobedila */
if(P1 > P2 && P1 > P3)
{
else if(P2 > P1 && P2 > P3)
{
else if(P3 > P1 && P3 > P2)
{
else/* Igraju se dodatne partije */
{
return 0;
9. Senzori
Potrebno predznanje: operatori, petlje, selekcije
Žarko u jednoj od igara koju igra na turniru P.O.S.O.T. treba svojim likom, koji vodi u igrici, da prođe kroz sobu sa senzorima. Senzori su postavljeni na podu sobe u N paralelnih linija po širini sobe. Prva linija, koja je najbliža Žarkovom liku ima samo jedan senzor koji je tačno na sredini sobe. Druga linija ima tri senzora, pri čemu se srednji nalazi tačno iza senzora u prvoj liniji. Treća linija ima 5
senzora, pri čemu su središta tri tačno iza senzora u drugoj liniji, a preostala dva su jedan sa jedne, a drugi sa druge strane.
Svaka naredna linija ima po dva senzora više tako što se u odnosu na predthodnu liniju dodaju po jedan sa leve i desne strane. Rastojanje između dva susedna senzora na svakoj liniji je jednako i iznosi R centimetara.
Ovako postavljeni senzori fprmiraju trougao. Dimenzije sobe su dovoljno velike da stanu svi predviđeni senzori. Žarkov lik u igrici
mora da prođe pravo po sredini sobe na drugu stranu, pri čemu će aktivirati sve senzore preko kojih pređe. Ako Žarko zna da je širina njegovog lika S centimetara, potrebno mu je da izračuna koliko će senzpra njegov lik aktivirati. Napisati program SENZORI koji za unete vrednpsti N, R i S određuje broj aktiviranih senzora. Primer. Ulaz: N = 5 R = 1.1 S = 5.4 Izlaz: 19 |
Treba uočiti da se broj senzora povećava u svakom redu za 2, počev od donjeg, u kojem je broj senzora 1, sve dokle je širina zahvaćenih senzora manja ili jednaka širini Žarkovog lika S(unosi korisnik). Broj zahvaćenih redova je N(unosi korisnik).
Koristiti petlju, menjati redove od 1 do N i formirati zbir senzora za vrednost broja senzora u tekućem redu.
Broj senzora u tekućem redu povećavati kroz cikluse za 2, počev od vrednosti 1, sve dok je ispunjen uslov da je širina zahvaćenih senzora manja ili jednaka širini Žarkovog lika.
/*Rešenje za programski jezik C */
int main()
{
double R,S;
scanf("%d%lf%lf",&N,&R,&S);
for(int i = 0; i < N; i++){
double sir = i*2*R;
if(i != 0 && S >= sir)
printf("%d\n",br);
return 0;
10. Stepeni
Potrebno predznanje: operatori, petlje, selekcije
Primeri
Ulaz:
30
60
Izlaz:
pravougli
Ulaz:
18
18
Izlaz:
tupougli
Ulaz:
75
60
Izlaz:
ostrougli
11. Iks-oks
Potrebno predznanje: operatori, selekcije
Mirko je mali programer koji pokušava da isprogramira igricu iks-oks. Blizu je da završi, ali mu je potrebna mala pomoć. Smislio je da korisnik mišem određuje kvadrat u koji će se njegov simbol upisati. Polje za igru se sastoji od 9 kvadrata (raspoređena u tri vrste i tri kolone) i svaki kvadrat je dimenzije 100 puta 100 piksela (polje je dimenzije 300 puta 300 piksela). Poznat je položaj piksela na koji je kliknuto mišem. Potrebno je odrediti redni broj kvadrata u kojem se taj piksel nalazi. Položaj piksela je određen rednim brojevima (koordinatama) tog piksela po horizontali i po vertikali, računajući od donjeg levog ugla polja (pikseli se broje od 1 do 300). Kvadrati se broje od 1 do 9, vrstu po vrstu, počevši od donjeg levog ugla polja naviše, kako je prikazano na slici.
|
Primeri
Ulaz:
1 1
Izlaz:
1
Ulaz:
120 280
Izlaz:
8
Ulaz:
100 201
Izlaz:
7
Ulaz:
101 200
Izlaz:
5
S obzirom da je broj piksela 30 puta manji od stranice kvadrata, redni broj kvadrata u nekom redu ili u nekoj koloni se može dobiti celobrojnim delenjem rednog broja piksela sa 30.
Ovde razlikujemo dva slučaja: 1 - da je broj piksela sa brojem 30 deljiv bez ostatka ili
2 - da je broj piksela sa brojem 30 deljiv sa ostatkom
Ako ima ostatka(brojevi nisu deljivi), onda dobijeni redni broj vrste(ili kolone) treba povećati za 1.
Za izračunati redni broj reda i redni broj kolone može se odrediti traženi broj tako što se na redni broj kolone doda broj kvadrata u prethodnim redovima, a to je proizvod broja prethodnih redova i broja kvadrata u jednom redu(u ovom slučaju 3).
/*Rešenje za programski jezik C */
int main()
{
Rešenje će uskoro biti prikazano ovde!
return 0;
12. Žarko
Potrebno predznanje: podaci, operatori,
Na velikom turniru P.O.S.O.T. u igranju kompjuterskih igrica, Žarko je odigrao četiri partije. Nakon završenih partija, zaključio je da mu je lakše da prati promenu rezultata između dve partije nego tačan broj bodpva. Tako je zapamtio da je
- u drugoj partiji imao tačno 1042 poena više nego u prvoj
- u trećoj partiji imao kpliko u prvoj i drugoj zajedno
- u četvrtpj partiji duplo manje nego u trećoj.
osvojenih u četvrtoj partiji izračunava kolikp je Žarko psvojio poena u prvoj partiji.
Primer.
Ulaz:
C = 2845
Izlaz:
2324