Šeštoji moksleivių informatikos olimpiada

                                       Pirmojo etapo uždavinių sąlygos

 

58. KOKIA SKAIČIAVIMO SISTEMA. Pradiniai duomenys – du sveikieji skaičiai a ir s (s > 0, a >= s). Teigiama, kad skaičius s yra lygus skaičiaus a skaitmenų sumai. Tačiau akivaizdu, kad taip nėra. Kyla įtarimas, kad skaičiai a ir s užrašyti kita, ne dešimtaine, skaičiavimo sistema.
Parašykite algoritmą, kuris nustatytų, ar egzistuoja tokia skaičiavimo sistema, kad būtų tenkinama sąlyga s = skaitmenų suma (a), ir jeigu egzistuoja, tai rastų šios skaičiavimo sistemos pagrindą x.


59. PARKETO KLOJIMAS. Stačiakampio kambario grindys klojamos parketo lentelėmis eglutės raštu:

Geriausias lentelių išdėstymas yra toks, kai duoto dydžio lentelėmis (jos nepjaustomos) padengiamas kuo didesnis kambario plotas (aukščiau pateiktame paveiksle lentelių išdėstymas nėra geriausias).

Parašykite algoritmą geriausiam lentelių išdėstymui rasti, t. y. reikia suskaičiuoti, kiek daugiausiai lentelių galima pakloti duoto ploto kambaryje.


Pradiniai duomenys – lentelės ilgis ilg (2 <= ilg <= 10), kambario plotis kpl (10 <= kpl <= 80) ir kambario ilgis kilg (kpl <= kilg <= 80) – išreikšti sveikaisiais skaičiais. Visų dydžių matavimo vienetas – parketo lentelės plotis.

60. TEIGINYS APIE STATŲJĮ TRIKAMPĮ. Stačiojo trikampio statinių a ir b ilgių kvadratų suma yra lygi įžambinės c ilgio kvadratui: a2 + b2 = c2



Pradiniai duomenys – trys neneigiami sveikieji skaičiai. Jeigu skaičius didesnis už nulį, tai jis reiškia trikampio kraštinės ilgį. Jeigu lygus nuliui, tai reiškia nežinomą kraštinės ilgį (t. y. vietoj jo gali būti įrašytas bet koks natūralusis skaičius).

Parašykite algoritmą, kuris nustatytų, ar teiginys „Pradiniais duomenimis išreikšti stačiojo trikampio kraštinių ilgiai" Antruoju atveju reikėtų rasti nežinomų kraštinių ilgius.

Jeigu galima rasti kelis skaičių trejetus, tai reikia rasti trikampio, kurio plotas mažiausias, kraštines. Pavyzdžiui, kai pradiniai duomenys 0, 15, 0, tai kraštinių ilgiai gali būti 9, 15, 12 arba 15, 20, 25, bet rezultatu reikia laikyti sprendinį 9, 15, 12.


 61. ATSTATYK SKAIČIUS. Algoritmo parametrai – keturi neneigiami skaičiai. Trečiasis skaičius turi būti lygus pirmųjų dviejų sumai, o ketvirtasis – pirmųjų dviejų mažiausiam bendrajam kartotiniui. Tačiau ne visi skaičiai žinomi. Vietoj nežinomų skaičių užrašyti nuliai.

Parašykite algoritmą rasti nežinomiems skaičiams, jeigu juos galima rasti. Jeigu galimi keli sprendiniai, tai reikia pateikti mažiausią. (Jei randami keli skaičiai ir galimos kelios jų mažiausios kombinacijos, tai reikia imti tą, kurios pirmesnis skaičius mažesnis).

Jeigu sprendinio negalima rasti, tai reikia palikti nulį nepakeistą.
 
Pavyzdžiai
Pradiniai duomenys
   Rezultatai
60  90  150  180 
60  90    0    0 
 0  90    0    0 
 0   0    0    0  
 0   0    0  180 
61  90    0  180
60   90  150  180 
60   90  150  180 
 1   90   91   90 
 1    1    2    1 
 1  180  181  180 
61   90    0  180


 
 

Antrojo etapo uždavinių sąlygos

62. KLAIDA RENKANT SKAIČIUS. Duoti trys natūralieji skaičiai: a, b, c. Yra žinoma, kad c = a + b. Tačiau renkant skaičius klaviatūra galėjo būti padaryta klaida – praleistas vienas kurio nors skaičiaus skaitmuo. Be to, dingdamas pirmasis skaitmuo pradangina ir po jo einančius nulius.

Reikia atstatyti prarastąjį skaitmenį, jeigu jis tikrai buvo prarastas ir įmanoma tai padaryti (t. y. jei renkant nebuvo padaryta daugiau klaidų). Atkreipiame dėmesį, jog uždavinys gali turėti daugiau negu vieną sprendinį.

Parašykite programą šiam uždaviniui spręsti.


Pradiniai duomenys įrašyti į tekstinę bylą, kurioje yra šešios eilutės. Kiekvienoje eilutėje – trys skaičiai. (Programa turi išspręsti uždavinį su šešiais duomenų rinkiniais.)

Rezultatai parodomi ekrane tokiu pavidalu: pradinių duomenų eilutė, po jos sprendinys(iai) – atstatytų skaičių eilutė(ės), kurioje pateikiami visi trys skaičiai. Jeigu skaičių neįmanoma atstatyti, tai vietoj sprendinio rašoma: SPRENDINIŲ NĖRA.

 Rezultatų pavyzdys
2003    13  2126
2003   123  2126

2003    23  2126
2003   123  2126

2003   123   212
2003   123  2126

2003   123  2126
2003   123  2126

   3   123  2126
2003   123  2126
   3  2123  2126

 345  7876   111
SPRENDINIŲ NĖRA 


63. PAPRASTOSIOS TRUPMENOS. Reikia rasti visas teigiamas paprastąsias trupmenas, kurių reikšmė mažesnė už 1. Trupmenos vardiklis turi neviršyti duotojo natūraliojo skaičiaus n.

Parašykite programą šiam uždaviniui išspręsti.


Pradinis duomuo – vienas natūralusis skaičius, įrašytas į tekstinę bylą.

Rezultatus rašykite kompiuterio ekrane.

Pavyzdys
Pradinis duomuo
Rezultatai
5
1/2 1/3 1/4 1/5 2/3 2/5 3/5 3/5 4/5


 
 
 

Trečiojo etapo uždavinių sąlygos

64. DALIKLIAI IR KARTOTINIAI. Duomenys – keturi sveikieji skaičiai: a, b, dbd ir mbk. Skaičius dbd turėtų būti lygus skaičių a ir b didžiausiam bendrajam dalikliui, skaičius mbk – skaičių a ir b mažiausiam bendrajam kartotiniui. Jeigu skaičius didesnis už nulį, tai jis yra pradinis duomuo, jei lygus nuliui – tai žymi skaičių, kurį reikia rasti. Jis turi būti pakeistas tokiu skaičiumi, kad būtų tenkinamos aukščiau minėtos sąlygos.

Jeigu galimi keli sprendiniai – tinka bet kuris. Jeigu uždavinys neturi nė vieno sprendinio – visus keturis skaičius reikia pakeisti nuliais.


Pradiniai duomenys surašyti į tekstinę bylą, turinčią 16 eilučių. Kiekvienoje eilutėje yra keturi skaičiai: a, b, dbd, mbk. Kiekviena eilutė – tai pradiniai duomenys vienam sprendiniui.

Rezultatai kartu su pradiniais duomenimis parodomi displėjaus ekrane. Kiekvienam sprendiniui skiriama viena eilutė.

Pavyzdys
Pradiniai duomenys
Rezultatai
a          b       dbd   mbk  a        b       dbd   mbk
15  20   5  60 
15  20   5 120 
15  20   0   0 
15  20   0  60 
 0   0   5  60 
 0   0  20  40  
 0   0  21  40 
 0   0   0   0  
       . . . 
15  20   5  60 
 0   0   0   0 
15  20   5  60 
15  20   5  60 
15  20   5  60 
20  40  20  40 
 0   0   0   0 
 1   1   1   1 
     . . . 
  

Didžiausiam bendrajam dalikliui rasti galima pasinaudoti šitokia funkcija:

function dbdf (x, y: integer): integer;
begin
  if x = 0
     then dbdf := y
     else dbdf := dbdf(y mod x, x)
end;

Mažiausiam bendrajam kartotiniui rasti galima pasinaudoti šitokia funkcija:

function mbkf (x, y: integer): integer;
begin
  mbkf := x div dbdf(x, y) * y
end;


65. LYGTIS. n-ojo laipsnio lygtis yra šitokio pavidalo:

anxn + an-1xn-1 + ... + a1x + a0 = 0;

koeficientai an, an-1, ..., a1, a0 yra sveikieji skaičiai.

Parašykite programą visiems n-ojo laipsnio (1 <= n <= 50) lygties sveikiesiems sprendiniams rasti.


 Lygčių pavyzdžiai
Lygtys
Sveikieji sprendiniai
x3 - 6x2 + 11x - 6 = 0  1 2 3
2x2 + 7x - 4 = 0 -4
2x3 + 7x2 - 4x = 0 -4 0
x2 - 9999x - 10000 = 0 -1 10000
-x5 + x4 + x3 + x2 + x + 1 = 0 sveikųjų sprendinių neturi;
 
Primename, kad:

a) n-ojo laipsnio lygtis gali turėti daugiausia n sprendinių;

b) galioja lygybė:

anxn + an-1xn-1 + ... + a1x + a0 = an(x - x1)(x - x2)...(x - xn-1)(x - xn);
čia x1, x2, ... xn – lygties šaknys.



Pradiniai duomenys yra tekstinėje byloje. Lygtis vaizduojama jos koeficientais (be x-ų ir jų laipsnių). Pirmiausia rašomas lygties laipsnis n (1 <= n <= 50), po to n + 1 koeficientų. Rašomi visi (ir nuliniai) koeficientai.

Kiekvienai lygčiai skiriama viena pradinių duomenų eilutė. Iš viso pradinių duomenų byloje yra 8 eilutės. Vadinasi, vienu atlikimu programa turi išspręsti 8 lygtis.


Rezultatai parodomi ekrane. Visi vienos lygties sprendiniai surašomi į vieną eilutę. Vadinasi, iš viso bus 8 rezultatų eilutės. Jeigu lygtis neturi nė vieno sveikojo sprendinio, rašomas tekstas: SPRENDINIŲ NĖRA.

Pavyzdys
Pradiniai duomenys
Rezultatai
Paaiškinimai
3 1 -6 11 -6 
2 2 7 -4 
3 2 7 -4 0 
2 1 -9999 -10000 
5 -1 1 1 1 1 1 
... 
1 2 3 
-4 
-4 0 
-1 10000 
SPRENDINIŲ NĖRA 
...
x3 – 6x2 + 11x – 6 = 0 
2x2 + 7x – 4 = 0 
2x3 + 7x2 – 4x = 0 
x2 – 9999x – 10000 = 0 
–x5 + x4 + x3 + x2 + x + 1 = 0 
...

66. DOMINO KAULIUKAI. Duota krūvelė domino kauliukų. Kiekvienas domino kauliukas perskirtas į dvi puses. Kiekvienoje pusėje užrašytas skaičius iš intervalo 0..6. Du kauliukus galima sujungti, jei skaičiai, užrašyti ant sujungiamų kauliukų pusių, sutampa.

Reikia nustatyti, ar krūvelėje esančius kauliukus galima išdėlioti į vieną liniją.

Laikykite, kad krūvelė nėra tuščia ir kauliukų skaičius neviršija 20000.


Pradiniai duomenys – tekstinė byla, kurioje nurodyta, kiek kokių kauliukų yra krūvelėje. Kiekvienos eilutėje yra trys skaičiai: pirmieji du apibūdina kauliuką, trečiasis parodo, kiek tokių kauliukų yra krūvelėje, pavyzdžiui:
 5 6  8
Tai reiškia, kad krūvelėje yra 8 kauliukai su skaičiais 5 ir 6.

Iš viso pradinių duomenų byloje yra ne daugiau kaip 28 užpildytos eilutės, nes tiek yra skirtingų kauliukų.


Rezultatas – displėjaus ekrane rašomas žodis GALIMA arba NEGALIMA.

Pavyzdys 
Pradiniai duomenys
Rezultatas
0 1  1 
1 2  2  
2 3  2
GALIMA
 
  

67. DAUGIANARIAI. Daugianariu vadinamas tokio pavidalo reiškinys:

anxn + an-1xn-1 + ... + a1x + a0.

Koeficientai an, an-1, ..., a1, a0 yra realieji skaičiai. Laipsniai n, n-1, …, 1, 0 – sveikieji neneigiami skaičiai. Nariai, kurių ai = 0, praleidžiami. Didžiausias n, kurio an <> 0, vadinamas daugianario laipsniu.

Su daugianariais atliekamos aritmetinės operacijos. Pavyzdžiui,

(-5x3 + 3,5x2 - 1) + (6x3 + 2x + 1) = (x3 + 3,5x2 + 2x)
(-5x3 + 3x2 - 1) - (-5x3 + 3x2 - 2) = (1)
(2,5x3 + 1) x (2x2 - 6x) = (5x5 - 15x4 + 2x2 - 6x)
(5x5 - 15x4 + 2x2 - 6x) / (2x2 - 6x) = (2,5x3 + 1)
(5x5 - 15x4 + 2x2 - 6x) / (2,5x3 + 1) = (2x2 - 6x)

Pateiktuose pavyzdžiuose daugianariai dalijosi be liekanos (t. y. buvo gaunama liekana, lygi nuliui). Tačiau liekana gali būti nelygi nuliui. Liekanos gavimo operaciją žymėsime simboliu \. Liekanos gavimo operacijos rezultatą apibrėšime šitaip:

P1 / P2 = Pdalmuo;
P1 \ P2 = Pliekana.

Pdalmuo ir Pliekana turi būti tokie, kad būtų tenkinamos sąlygos:

P1 = P2 x Pdalmuo + Pliekana;
d(Pliekana) < d(P2);

čia Pi – daugianaris, d(Pi) – daugianario Pi laipsnis.

Pavyzdžiui:

(5x5 - 15x4 + 3x2 - x + 3) / (2,5x3 +1) = (2x2 - 6x);
(5x5 - 15x4 + 3x2 - x + 3) \ (2,5x3 + 1) = (x2 + 5x + 3).

Parašykite programą, kuri atliktų operacijas +, -, *, / ir \ su daugianariais.


Pradiniai duomenys yra tekstinėje byloje. Vienai operacijai ir dviems jos operandams skiriamos 3 eilutės. Pirmoje eilutėje rašomas tik vienas simbolis – operacijos ženklas, kitose dviejose eilutėse – daugianariai – tos operacijos operandai. Iš viso pateikiama 8 operacijos. Vadinasi, pradinių duomenų byla turi 24 eilutes, o programa turės atlikti aštuonias operacijas.

Rezultatai surašomi į tekstinę bylą. Kiekvienas daugianaris rašomas į atskirą eilutę. Byloje turės būti 8 eilutės.

Daugianarių vaizdavimas pradinių duomenų ir rezultatų bylose. Pradžioje rašomas daugianario laipsnis n (0 <= n <= 10), po to koeficientai an, an-1, ... , a1, a0 – realieji skaičiai su vienu skaitmeniu po kablelio (taško). Pavyzdžiui, daugianaris

-5x3 + 3,5x2 - 1

vaizduojamas šitaip:

3  -5.0  3.5  0.0  -1.0



 
Pavyzdys
Pradiniai duomenys
Rezultatai
+ 
3  -5.0   3.5   0.0  -1.0 
3   6.0   0.0   2.0   1.0 
… …
3  1.0  3.5  2.0  0.0 
… … 
 

68. HAMMINGO SEKA. Reikia generuoti didėjančią natūraliųjų skaičių seką, kurios kiekvienas narys išreiškiamas sandauga

2i * 3j * 5k;

čia i, j, k – sveikieji neneigiami skaičiai.

Parašykite programą, kuri generuotų tokią seką. Generavimą reikia baigti, kai gaunamas paskutinis sekos narys, dar neviršijantis 232 – 1 (t. y. maxlongint) arba paspaudžiamas tarpo klavišas.

Programos dydis neturi viršyti 4Kbaitų.


Pradinių duomenų nėra.

Rezultatai rašomi į tekstinę bylą. Kiekvienam sekos nariui skiriama viena eilutė. Į ją rašomi du skaičiai: sekos nario eilės numeris ir sekos narys.

Rezultatų pavyzdys (pirmieji dešimt sekos narių):
 1       1
 2       2
 3       3
 4       4
 5       5
 6       6
 7       8
 8       9
 9      10
10      12

69. TRUMPIAUSIAS KELIAS. (Šis uždavinys (bei uždavinys Rėmeliai) buvo pasiūlytas Šeštojoje tarptautinėje olimpiadoje, vykusioje 1994 m. Stokholme, Švedijoje, tačiau toje olimpiadoje nebuvo panaudotas.)  Duotas stačiakampis laukas, kurio kampų koordinatės yra (0, 0) ir (100, 100). Jo viduje išdėstyta n (n <= 30) kvadratėlių. Reikia rasti trumpiausią kelią iš taško (0, 0) į (100, 100) tokį, kuris nekirstų kvadratėlių.

Be to, žinoma, kad

a) kiekvieno kvadratėlio kraštinės ilgis yra 5 vienetai;
b) kvadratėlių kraštinės yra lygiagrečios koordinačių ašims;
c) kvadratėlių kampų koordinatės – sveikieji skaičiai;
d) kvadratėliai vienas nuo kito atskirti bent vienu vienetu.

Pradiniai duomenys imami iš tekstinės bylos. Pirmoje eilutėje yra kvadratėlių skaičius n. Kitose eilutėse yra kvadratėlių apatinių kairiųjų kampų koordinatės (0 <=  x <=  95; 0 <=  y <=  95).

Rezultatai – kelio koordinatės – turi būti rašomi į tekstinę bylą kiekvienoje eilutėje po vieną koordinatę. Turi būti pradinė kelio koordinatė, po to koordinatės, kuriose kelias keičia savo kryptį, ir galinė kelio koordinatė. Koordinatės turi būti rašomos ta tvarka, kuria jos išsidėstę kelyje.

Pavyzdys
Pradiniai duomenys
Rezultatai
5 
5 5 
5 15 
15 10 
15 20 
90 90 
  0   0 
  5  10  
 20  20  
 95  90 
100 100  
 

70. RĖMELIAI. Paveikslėlyje vaizduojami vienas ant kito sudėti rėmeliai. Kiekvienas viršutinis rėmelis dengia apatinius. Rėmelio plotis – 1 simbolis, kiekviena rėmelio briauna ne trumpesnė kaip 3 simboliai. Visų rėmelių matosi bent po vieną kiekvienos briaunos simbolį. Kampinis simbolis priklauso abiem to kampo briaunoms.
 
 

Parašykite programą, kuri surastų, kokia tvarka n (n <= 26) rėmelių yra sudėti vienas ant kito.


Pradiniai duomenys – tekstinė byla, kurioje saugomas piešinuko dydis ir pats piešinukas.

Pirmoje bylos eilutėje yra piešinuko aukštis a, antroje – piešinuko plotis p. Likusiose a duomenų bylos eilutėse yra piešinukas. Kiekvienos šių eilučių ilgis – p. Rėmeliai žymimi skirtingomis lotyniškosios abėcėlės didžiosiomis raidėmis (nuo A iki Z). Fonas žymimas tašku (.).

Pradiniai duomenys tenkina reikalavimus:
a <= 30; p <= 30; 



Rezultatas rašomas į tekstinę bylą. Tai – raidžių seka, atitinkanti rėmelių sudėjimo tvarką: pirmoji sekos raidė turi atitikti viršutinį rėmelį, paskutinioji – apatinį. Raidės turi būti parašytos vienoje eilutėje, tarp jų neturi būti tarpų. 
Pavyzdys
Pradiniai duomenys
Rezultatai
9 
8 
.CCC.... 
ECBCBB.. 
DCBCDB.. 
DCCC.B.. 
D.B.ABAA 
D.BBBB.A 
DDDDAD.A 
E...AAAA 
EEEEEE..  
 
CBADE