Primii pași! Ghiocelul, mărțișorul și ALGORITMIISorin GrozaÎncet, încet căldura de la gura sobei este înlocuită de căldura soarelui de primăvară. Acum când zăpada începe să se topească, ghioceii și mărțișoarele sunt un simbol al unui nou început. Am vrea ca și algoritmii prezentați să vă folosească în această nouă perioadă de studiu și să contribuie la îmbogățirea cunoștințelor în ale informaticii. Și nu în ultimul rând, rezolvându-le, vă dovediți dragostea pentru informatică.
GhioceiDe îndată ce zăpada a început să se topească și primii ghiocei să mijească de sub plapuma albă, baieții clasei a V-a B au hotărât să pornească la cules de ghiocei. Ei sunt foarte hotărâți să ofere colegelor de clasă cât mai mulți ghiocei. După ce fiecare a oferit un anumit număr de ghiocei, fetele au vrut să afle care este cea mai lungă secvență de băieți cu proprietatea că fiecare a oferit un număr de ghiocei mai mic decât următorul. Prompter, informaticianul clasei a fost rugat să scrie programul care să rezolve problema. Scrieți și voi acest program și comparați-l cu cel scris de Prompter.
Exemplu
Intrare n = 6 15, 7, 10, 15, 8, 12
Ieșire 7 10 15
Această problemă reprezintă de fapt găsirea "celei (celor) mai lungi secvențe de elemente consecutive ordonate strict crescător". Deoarece pot să existe mai multe astfel de secvențe, pentru început vom afla lungimea acestor secvențe în variabila max. Pentru aceasta vom incrementa contorul f cât timp x[i]<x[i+1]. Când nu mai este îndeplinită această condiție înseamnă că s-a terminat o astfel de secvență. Dacă lungimea ei este mai mare decât max atunci vom păstra în max lungimea ei. Printr-o nouă parcurgere a șirului, vom afișa fiecare secvență a cărei lungime este egală cu max. Astfel, vor fi afișate toate secvențele ce îndeplinesc condiția cerută.
MărțișoareLa talcioc e agitație mare deoarece odată cu venirea primăverii au apărut mărțișoarele. Anul acesta sunt la mare modă mărțișoarele care au gravate pe ele diverse cuvinte. Vânzătorul a aflat că un grup de mai mulți prieteni doresc să aibă mărțișoare ale căror cuvinte să fie anagrame între ele, adică să fie formate din aceleași litere dar dispuse în altă ordine (de exemplu, roma - amor - ramo). Deoarece sunt mulți cumpărători și cu toții se grăbesc, vânzătorul dorește să împartă mărțișoarele în grupe, astfel încât fiecare cuvânt de pe mărțișor să reprezinte o anagramă a celorlalte cuvinte din grup. Un grup trebuie să conțină cel puțin două cuvinte. Pentru că are foarte multe mărțișoare și timpul este scurt, vânzătorul vă roagă să-i scrieți un program care face acest lucru - evident, în schimbul unui mărțișor.
Exemplu
Intrare n=10 aiud, xxl, dor, duia, xlx, sos, udai, lxx, bona, daiu
Ieșire aiud duia udai daiu xxl xlx lxx
După citirea celor n cuvinte (șirul x) se face o "dublură" a acestuia pentru a nu pierde cuvintele originale (șirul y), deoarece fiecare cuvânt se ordonează astfel încât să conțină caracterele ordonate alfabetic. Astfel pentru a verifica dacă două sau mai multe cuvinte sunt anagrame ale unui același cuvânt, acestea se ordonează alfabetic și se verifică dacă sunt egale între ele. Se vor ordona alfabetic, în paralel, șirul ce conține cuvintele în care caracterele sunt ordonate alfabetic și șirul cuvintelor inițiale. După această operație cuvintele egale între ele vor ocupa poziții consecutive. Printr-o parcurgere a șirului cuvintelor ordonate alfabetic (șirul x) se observă dacă există mai multe cuvinte consecutive egale. Dacă sunt mai mult de două, se va face tipărirea cuvintelor de pe pozițiile corespunzătoare, dar din șirul cu cuvintele inițiale (șirul y). În caz că nu există astfel de grupuri se va afișa un mesaj.
La discotecăLa marea discotecă a primăverii și-au anunțat participarea foarte multe persoane. Organizatorii împreună cu D.J.-ul doresc ca totul să fie perfect. În vederea realizării unei petreceri de neuitat D.J.-ul dorește să cunoască unele detalii despre melodiile pe care le va prezenta. Astfel, el confruntă topul muzical de săptămâna aceasta cu topul muzical de săptămâna trecută. Neavând foarte mult timp la dispoziție, el îi cere unui programator (în schimbul intrării gratuite la discotecă) să scrie un program care, plecând de la cele două topuri, să stabilească următoarele:
Exemplu Intrare n=6 abba, boyz, hanson, colio, sandra, queen (topul săptămânii trecute) sandra, boyz, queen, colio, hanson, vanghelis (topul acestei săptămâni)
Ieșire noi intrari: vanghelis stationari: boyz colio urcare maxima: sandra cu 4 pozitii
Se citesc componentele topurilor celor două săptămâni în șirurile x și y. Pentru a găsi noile intrări în top se caută fiecare element al șirului y în șirul x. Dacă nu există, înseamnă că este o nouă intrare și se va afișa pe ecran. Dacă elementele de pe poziții identice din cele două șiruri sunt egale atunci aceasta reprezintă o staționare, situație în care se va afișa această valoare. În ceea ce privește determinarea formației cu cea mai mare urcare în top, vom calcula elementul cu diferența cea mai mare dintre poziții în cele două șiruri. În variabila poz vom avea în final poziția în șirul y a formației cu cea mai mare urcare, iar în max vom avea această urcare. Pentru consolidarea cunoștințelor în informatică și pentru pregătirea așa cum se cuvine a concursurilor care vă așteaptă, vă propunem spre rezolvare următoarele probleme:
Despărțirea în silabePrichindel este foarte bucuros deoarece a învățat despărțirea cuvintelor în silabe. Pentru a se verifica asupra temelor pe care le are de făcut, el îl roagă pe fratele lui mai mare să-i facă următorul program: se introduc n cuvinte despărțite în silabe, ce formează un dicționar și un text ce conține mai multe fraze. Prichindel va descompune în silabe cuvintele acestui text și va face confruntarea cu soluția dată de program. Acesta va descompune cuvintele conform dicționarului. Dacă un cuvânt nu apare în dicționar se va da mesajul Dictionar incomplet.
Exemplu Intrare n=7 ma-ma, din, fa-vo-rit, ca-ba-na, mun-te, eu, pe-ru-ca - dicționarul cabana din munte. - textul
Ieșire ca-ba-na din mun-te.
IntervaleLa matematică, elevii au învățat despre intervale. Fiecare elev a trebuit să indice câte un interval de forma [x,y]. Ei au învățat la școală că un interval poate fi inclus într-un alt interval (de exemplu, intervalul [5,8] este inclus în intervalul [2,10]). Scrieți un program care citește cele n intervale și determină acel interval care este inclus în cele mai multe intervale. Programul va afișa acest interval și numărul de intervale în care este inclus.
Exemplu Intrare n=5 [8,40], [10,20], [1,99], [6,25], [15,20]
Ieșire [10,20] - 3
ExcursiaVenirea primăverii coincide și cu plecarea în excursii. Pentru a pleca într-o excursie, la cules de ghiocei, elevii unei clase și-au scos alocația, fiecare având o sumă de bani . Scrieți un program care determină cel mai mare grup de copii ale căror sume de bani se divid fiecare cu un același număr. Se vor afișa pe ecran sumele de bani ale copiilor care formează acest grup.
Exemplu Intrare n=9 7, 15, 20, 6, 105, 18, 40, 111, 35
Ieșire 15 20 105 40 35
Domnul Sorin Groza este profesor la Clubul Copiilor din Aiud și poate fi contactat prin intermediul redacției. [cuprins] |