Primii pași
Și "piticii" concureazăGroza SorinPentru a veni în sprijinul celor care abia acum încep să pătrundă în tainele informaticii, vom prezenta câteva probleme împreună cu algoritmul de rezolvare și programul sursă. Am ales pentru început câteva din problemele propuse la edițiile din 1996 și 1997 ale concursului de informatică "INFO-STAR" organizat de Clubul Copiilor din Aiud. Problemele au fost compuse de domnul profesor Ovidiu Domșa de la Colegiul "Horea, Cloșca și Crișan" din Alba Iulia, special pentru acest concurs. Organizatorii îi aduc mulțumiri și pe această cale. Pentru fiecare problemă prezentăm un algoritm de rezolvare la nivelul copiilor cărora li se adresează. TrepteUn pitic vrea să urce o scară care are n trepte de înălțimi date, ordonate crescător. Înălțimile treptelor sunt date în cm și sunt valori întregi. Acolo unde diferența între două trepte consecutive este de 1cm piticul urcă fără dificultăți. Unde diferența este mai mare decât 1cm piticul trebuie să ia o pastilă care îi dă putere să sară pe treapta următoare. Cunoscând înălțimile treptelor, prima fiind obligatoriu 0, piticul vrea să afle care este numărul minim de pastile de care are nevoie pentru a urca scara și de asemenea care este cea mai mare diferență dintre două trepte consecutive. Date de intrare: n=9 0,3,4,6,7,10,19,20,21 Date de ieșire: numarul minim de pastile este 4 diferenta maxima este 9 Rezolvare Pentru început se va calcula diferența de înălțime pentru fiecare două trepte consecutive. Când aceasta este mai mare decât 1 se va incrementa un contor care în final va reprezenta numărul de pastile necesare piticului. De asemenea, într-o variabilă se va păstra diferența; dacă diferența curentă este mai mare decât cea mai mare diferență găsită până atunci, evident, aceasta se actualizează. Practic, algoritmul determină maximul dintr-o mulțime de numere. RobotMembrii cercului de electronică de la Clubul Copiilor din Aiud au realizat un robot care știe să se deplaseze la comandă. Astfel, comanda Nx deplasează robotul x metri spre nord, comanda Ey, Vz, St deplasează robotul y metri spre est, z metri spre vest, respectiv t metri spre sud (x, y, z, t sunt numere naturale). Un grup de copii "năzdrăvani" dau o serie de comenzi robotului pentru a-l rătăci. La comanda STAI robotul se oprește. Ajutați membrii clubului de electronică ca prin maxim două comenzi să readucă robotul în punctul de plecare. Date de intrare: N3, V5, S3, E4, E5, N2, STAI Date de ieșire: Robotul revine prin comenzile: V4 S2 Rezolvare Pentru rezolvarea problemei vom folosi două variabile: x și y care reprezintă poziția robotului la un moment dat. Inițial ele au valorile egale cu 0, acest lucru reprezentând faptul că robotul se află în originea unui sistem de coordonate. După citirea fiecărei comenzi, x și y își măresc sau micșorează valoarea cu numărul de pași, în funcție de direcția dată. În final (după citirea comenzii "STAI") x și y vor reprezenta poziția robotului. În funcție de cadranul în care se află, se vor tipări direcția de revenire și numărul de pași. CuvinteSe consideră o listă de cuvinte, despărțite printr-un spațiu, introduse de la tastatură. Cuvintele au în componență doar litere mici ale alfabetului latin. Două cuvinte se oglindesc dacă literele unui cuvânt apar în celălalt cuvânt în ordine inversă ( car - rac se oglindesc). Un cuvânt este simetric dacă citit de la stânga la dreapta și de la dreapta la stânga obținem același cuvânt (cojoc este simetric). a) afișați perechile de cuvinte care se oglindesc; b) afișați cuvintele simetrice din frază; c) dacă fraza conține numai cuvinte simetrice sau care se oglindesc să se formeze cea mai lungă frază simetrică (ca număr de cuvinte folosite), fiecare cuvânt fiind folosit o singură dată. Date de intrare: n=8 la mos era som al cojoc are caiac Date de ieșire: a) are - era mos - som al - la b) cojoc caiac c) la mos era cojoc are som al (o solutie !) Fiecare cuvânt din text se inversează, apoi se caută un cuvânt identic cu inversul; când a fost găsit se tipăresc cele două cuvinte și se depun fiecare în câte un șir. Aceste două șiruri, unul pentru cuvânt și celălalt pentru invers, le vom folosi la punctul c) pentru formarea frazei. Pentru determinarea cuvintelor simetrice inversăm fiecare cuvânt și verificăm dacă este identic cu cuvântul însuși. În caz afirmativ acesta va fi afișat și depus într-un șir al cuvintelor simetrice, altfel va fi abandonat. Pentru rezolvarea punctului c) verificăm dacă textul conține doar cuvinte simetrice și care se oglindesc. Acest lucru este adevărat doar dacă numărul cuvintelor depuse în cele trei șiruri este egal cu numărul total de cuvinte (s+2*k=n). În caz afirmativ vom adăuga cuvintele primului șir, urmat de un cuvânt din șirul celor simetrice, apoi cuvintele oglindă ale primului șir, dar de la sfârșit spre început pentru ca fraza să respecte condiția de a fi simetrică. ȘefulUn grup format din n copii, așezați în linie la distanțe egale, participă la un joc. Fiecare trebuie să-și aleagă pe rând o sumă de bani distinctă de cele alese de colegii săi. La un moment dat unul dintre copii devine șef, iar toți cei din dreapta lui donează suma de bani celui aflat în stânga șefului la aceeași distanță față de șef la care se află și el. Dacă un copil nu are corespondent, rămâne cu suma inițială. a) verificați dacă fiecare copil alege corect suma; b) să se determine poziția copilului care va deveni șef și astfel va fi cel mai bogat posibil după donarea banilor de către cei din dreapta lui. Se va afișa poziția șefului, șirul obținut după donație, respectiv poziția și suma celui mai bogat copil. Date de intrare: n=7 45, 34, 23, 12, 57, 43, 24 Date de ieșire: Sume corecte Sef 3 dupa donatie 102, 46, 23, 0, 0, 43, 24 cel mai bogat 1 cu 102 Rezolvare Problema este foarte interesantă și face apel la procedeul numit "împăturarea unui șir". Primul punct este relativ simplu, el constând în a verifica dacă un element nou introdus nu se regăsește printre elementele introduse până la el. Se vor păstra, apoi afișa pozițiile copiilor care nu verifică această proprietate. Pentru aflarea șefului se procedează astfel: va fi considerat șef fiecare copil pe rând. Se va realiza împăturarea șirului, adică elementele din dreapta șefului se vor aduna la cele din stânga șefului (respectând simetria față de șef) după care devin nule. Se va determina cel mai bogat copil și poziția lui. Dacă se găsește un copil mai bogat, după fiecare încercare se va reține configurația. În final vom afișa rezultatele pentru situația optimă. Se observă că metoda nu este optimă, ea implementând algoritmul conform căruia se încearcă toate soluțiile și se păstrează cea mai bună. Să nu uităm că problema se adresează "celor mici". Vă propunem să căutați soluții mai performante. [cuprins] |