Primii pași... TOAMNA se numără... ...ALGORITMIISorin Groza Venirea toamnei coincide și cu începerea unui nou an școlar, deci un nou început, o nouă perioadă de muncă pentru îmbogățirea cunoștințelor în ale informaticii. Pentru un succes cât mai mare este nevoie de o bază cât mai solidă. În acest scop continuăm prezentarea unor probleme împreună cu algoritmii corespunzători.
Greierele și furnicilePe toată durata verii, greierele a cântat și a jucat și s-a împrumutat de la vecinele furnici. Iată că acum, în prag de iarnă acestea s-au gândit să-i ceară fiecare datoria. Cum greierele nu este învățat cu calculele s-a gândit că are nevoie de un program pentru a afla ceea ce-l interesează, adică: l cea mai mare sumă cu care este dator și la câte furnici trebuie să dea această sumă; l care este cel mai mare număr de furnici care trebuie să primească o aceeași sumă de bani de la greiere și care este această sumă.
Exemplu: Intrare n=8 25 99 12 25 99 25 88 12 Ieșire suma maxima datoare 99 la 2 furnici 3 furnici - suma 25
Pentru a afla cea mai mare sumă cu care este dator greierele, vom determina valoarea maximă din șirul datoriilor (max) și vom vedea de câte ori este prezentă această valoare în șir (contorul k). A doua cerință este echivalentă cu aflarea valorii care apare de cele mai multe ori în șir. Vom lua fiecare element ai și-l vom compara cu toate elementele aj (j=i, n) în caz de egalitate incrementând un contor k. Dacă k este mai mare decât maximul determinat până în acel moment, valoarea lui va fi stocată în max iar valoarea lui ai va fi stocată în val. În final max va indica numărul maxim de valori egale, iar val va indica valoarea respectivă.
Aranjarea cuvintelor La gura sobei doi copii joacă următorul joc: fiecare îi propune celuilalt un număr de cuvinte și încă un cuvânt suplimentar. Fiecare trebuie să aranjeze cuvintele unul sub altul, astfel încât citite pe o coloană k să se obțină cuvântul suplimentar. Ei au observat că pentru multe cuvinte și de lungime mare, găsesc foarte greu soluția jocului. Scrieți-le un program care afișează cum trebuie așezate cuvintele și pe ce coloană trebuie făcută citirea pentru a se obține cuvântul suplimentar.
Exemplu: Intrare 5 - nr. cuvinte tren cult mac acar teama - cuvintele mulțimii careu - cuvântul suplimentar
Ieșire Coloana de citire 2 a|c|ar m|a|c t|r|en t|e|ama c|u|lt
Pentru a vedea dacă pe o coloană k se poate obține cuvântul suplimentar procedăm astfel: vom forma un nou cuvânt prin lipirea literelor de pe poziția k din fiecare cuvânt. Mai rămâne să vedem dacă mulțimea literelor acestui nou cuvânt este identică cu mulțimea literelor cuvântului suplimentar. Pentru aceasta se ordonează alfabetic cele două cuvinte și se verifică dacă sunt identice. Dacă da, se iau pe rând literele cuvântului suplimentar și pentru fiecare literă se găsește cuvântul care are pe poziția k litera respectivă. Este clar că numărul maxim al coloanei este egal cu lungimea celui mai mic dintre cuvinte (min). Deci 1 Ł k Ł min. Dacă nu se găsește potrivirea pentru nici o coloană se va afișa un mesaj corespunzător.
Cursul dolaruluiÎn fiecare zi putem afla cu toții raportul dintre dolarul american și leul românesc. Față de ziua precedentă, dolarul poate valora mai mult sau mai puțin. Cei care urmăresc cursul dolarului sunt interesați de tot felul de statistici. Având cotația dolarului pentru o perioadă de n zile se cere să se scrie un program care găsește cea mai lungă perioadă de zile în care creșterea dolarului este constantă. Programul va afișa pe ecran perioada de cotații căutată și creșterea în această perioadă.
Exemplu: Intrare n=12 5 2 15 7 10 13 16 81 4 8 12 1
Ieșire Perioada de cotatii cautata este: 7 10 13 16 Cresterea zilnica este 3 Pentru cei care nu au aflat până acum, secvența cerută reprezintă o progresie aritmetică. Algoritmul folosește faptul că diferența dintre oricare două elemente vecine ale unei progresii aritmetice este aceeași. Din această cauză, vom construi un alt șir b după regula bi=ai+1-ai pornind de la șirul inițial. Aflarea secvenței cerute din șirul a este echivalentă cu aflarea celei mai lungi secvențe de elemente egale din șirul b. Acest lucru se face prin compararea elementelor vecine și creșterea unui contor cât timp acestea sunt egale. Când găsim o valoare mai mare decât cea găsită până la acel moment vom păstra poziția de început și de sfârșit a secvenței.
În încheiere vă propunem spre rezolvare câteva probleme, cerându-vă algoritmi cât mai eficienți.
GrupuriLa o croazieră participă n turiști și nu există decât un vapor de capacitate dată c. În vederea constituirii grupurilor ce vor călători pe rând cu vaporul, ghidul oferă bilete pe care sunt notate litere din alfabet. Un grup este format din acele persoane care au tras bilete cu litere identice. Să se spună dacă toate grupurile formate în urma tragerii biletelor au în componență un număr mai mic de persoane decât capacitatea vaporului. În caz negativ se va afișa mesajul "IMPOSIBIL". Grupurile vor pleca în ordinea descrescătoare a numărului de componenți. Să se afișeze grupurile în ordinea în care vor pleca în croazieră.
Exemplu: Intrare n=10 A B C A B L A C B H c=6
Ieșire (1,4,7) (2,5,9) (3,8) (6) (10)
BâlbâitulUn candidat cam bâlbâit dictează un articol, purtătorului său de cuvânt. Bâlbâitul are tendința de a repeta unele cuvinte. Purtătorul de cuvânt, în vederea transmiterii articolului către ziar, va trebui să elimine toate repetările succesive ale unui cuvânt. Scrieți un program care afișează articolul corect.
Exemplu: Intrare eu am am sa fac o o o sosea ca la la carte.
Ieșire eu am sa fac o sosea ca la carte.
Balul La marele bal organizat de Ziua Dăruinței sosesc b băieți și f fete. Se cunosc înălțimile tuturor celor b băieți și celor f fete. O pereche de dansatori trebuie formată dintr-o fată și un băiat de aceeași înălțime. Se dorește să se formeze un număr maxim de perechi pentru dans. Să se afișeze pe ecran câte perechi vor dansa, precum și componența acestora.
Exemplu: Intrare b=4 140 125 140 130 f=5 120 140 130 125 110
Ieșire 3 perechi 1 cu 2; 2 cu 4; 4 cu 3 [cuprins] |