GĂLĂCIUC '99Doru Popescu Anastasiu În luna iulie s-a desfășurat la Gălăciuc, județul Vrancea Concursul anual de Informatică pentru Gimnaziu, desfășurarea concursului fiind posibilă datorită efortului depus de dl. Emil Onea, inspector la ISJ Vrancea. Vă prezentăm în continuare problemele propuse la acest concurs.
Muzica pe CD (clasa a V-a)Se consideră n (1ŁnŁ100) melodii ale căror durate de audiere (în minute și secunde) sunt cunoscute. Există un CD pe care se pot înregistra melodii cu o durată totală egală cu ttm (0ŁttmŁ59) minute și tts (0ŁttsŁ59) secunde. Duratele melodiilor sunt date sub forma a doi vectori tm = (tm(1), tm(2), ..., tm(n)) și ts=(ts(1), ts(2), ..., ts(n)), tm pentru minute și respectiv ts pentru secunde. Componentele lui tm și ts sunt numere naturale cuprinse între 0 și 59. Astfel melodia 1 are tm(1) minute și ts(1) secunde, melodia 2 are tm(2) minute și ts(2) secunde și așa mai departe. Se cere: a) Să se afișeze durata tuturor melodiilor în minute și secunde. b) Să se înregistreze pe CD cât mai multe melodii (nu se pot înregistra melodii incomplete) astfel încât între oricare două melodii să existe un interval de 5 secunde pauză. Se vor afișa numerele asociate melodiilor, precum și timpul rămas neînregistrat de la ultima melodie până la sfârșitul CD-ului.
Observații 1) Este posibil să existe mai multe soluții. În acest caz se va afișa una singură. 2) Nu are importanță ordinea în care se înregistrează melodiile pe CD. 3) Vă rugăm să respectați formatul de afișare a datelor de ieșire din exemplul de mai jos.
Exemplu Intrare n=8 ttm=21 tts=4 tm=(4,2,3,2,6,4,6,4) ts=(10,5,0,5,7,10,7,10) Ieșire a) 31 minute si 54 secunde b) melodiile pe CD sunt: 1 2 3 4 6 8 timpul ramas este 1 minute si 24 de secunde
Soluție Pentru punctul a) calculăm suma componentelor vectorului tm în sm și suma componentelor vectorului ts în ss, după care transformăm în minute secundele date de ts, adunându-le la sm și scăzându-le din ss.
Pentru punctul b) ordonăm melodiile crescător după durata lor, urmând să le afișăm pe primele care au durata totală mai mică sau egală cu cea a CD-ului și maximă cu această proprietate.
Codificare (clasa a VI-a)Se dă de la tastatură o cifră k diferită de 0 și 1 și un text x (cu cel mult 255 caractere) format din litere mici ale alfabetului englez. Textul x se codifică literă cu literă, fiecare literă fiind înlocuită cu un număr natural egal cu kpoz, unde poz este poziția literei în alfabet. Astfel, 'a' se codifică prin k1, 'b' se codifică prin k2, și așa mai departe. Între numerele codificării se lasă câte un spațiu. Se cere să se afișeze cea mai lungă secvență (litere succesive) de litere egale din x, precum și codificarea textului.
Observații 1. La punctul a), dacă există mai multe soluții se va afișa una singură. 2. Datele de intrare se consideră corecte. 3. Se va respecta formatul de afișare a datelor de ieșire din exemplu.
Exemplu Pentru k=2 și x='gaaala' se va afișa: a) aaa b) 128 2 2 2 4096 2
Soluție Pentru punctul a) determinăm pentru fiecare literă din text secvența cea mai lungă care are toate literele egale cu ea (și începe cu ea). După care o afișăm pe cea mai lungă (prima). Pentru punctul b) folosim funcția poz_lit care returnează poziția unei litere în alfabet, iar pentru calculul puterii kpoz folosim vectori, deoarece aceste puteri pot depăși tipurile numerice predefinite.
Numere asemenea (clasa a VII-a)Se dă o mulțime X={x(1), x(2), ..., x(n)} de n (1ŁnŁ100) numere naturale mai mici sau egale cu 109 și un număr natural y mai mic sau egal cu 109. Două numere naturale scrise în baza 10 a(1)a(2)... a(p) și b(1)b(2)...b(q) se numesc asemenea dacă p=q și există kÎ{-9, -8, . . ., 8, 9} astfel încât a(i)=b(i)+k, pentru orice iÎ{1,2,...,n}. a) Să se afișeze acele numere din X care sunt asemenea cu y. b) Să se afișeze o submulțime Z a lui X cu număr maxim de elemente care să aibă proprietatea că orice două elemente din Z sunt asemenea.
Exemplu Intrare n=9 X={15, 213, 38, 324, 49, 546, 200, 657, 30} y=27 Ieșire a) 38 29 b) 213 324 546 657
Soluție În rezolvarea acestei probleme vom folosi două funcții, nr_cifre și asemenea, prima returnând numărul de cifre ale unui număr (dat ca parametru), iar a doua verifică dacă două numere (date ca parametri) sunt asemenea.
PiațaSe dă o piață dreptunghiulară pavată cu m linii și n coloane (1Łm, nŁ20) de dale pătratice; unele dale sunt verzi. a) În această piață se pot efectua doar pași de anumite lungimi introduse de la tastatură. Se poate păși doar pe dale verzi, iar deplasările trebuie să fie paralele cu marginile pieței. Dala de coordonate (1,1) se află în colțul din stânga sus a pieței. Dându-se coordonatele unei dale de plecare și ale unei dale de sosire, se cere să se găsească o secvență de pași prin care să se ajungă de la plecare la sosire. Fiecare deplasare va fi codificată prin lungimea pasului și direcția în care este efectuat acest pas (Nord, Sud, Est, Vest). Dalele de plecare și sosire sunt verzi.
Observație Numărul de lungimi de pași si numărul de dale verzi se introduc de la tastatură.
b) În piață trebuie așezată o tarabă pătrată de latură p dată, astfel încât să fie acoperite cât mai multe dale verzi. Laturile tarabei vor fi paralele cu marginile pieței. Taraba nu are voie să iasă în afara pieței. La ieșire se va preciza numărul de dale acoperite.
Exemplu Intrare m=7 n=8 p=4 nr. lungimi: 5 lung. pasilor : 1 2 3 4 7 nr. dale verzi: 8 coordonate dale verzi: 2 5 2 6 4 2 4 5 5 8 7 1 2 2 6 6 punctul de start: 2 2 punctul de sosire: 6 6 Ieșire a) 2Sud 3Est 2Nord 1Est 4Sud b) 4
Soluție Pentru punctul a) folosim metoda backtracking și determinăm o singură soluție. Codificarea celor patru tipuri de deplasări Nord, Sud, Est, Vest este precizată prin vectorii de constante, x și y. Secvența de pași este reținută în tabloul t, fiecare componentă tij având 4 informații: numărul mutării, tipul deplasării dat de vectorii x și y, precum și lungimea acesteia. Pentru punctul b) se glisează taraba pe tabloul corespunzător pieței și se reține poziția care acoperă cele mai multe dale verzi.
[cuprins] |