Lista de probleme 9

Se consideră matricea A ale cărei elemente pot avea doar valorile 0 sau 1 și în care numerotarea liniilor și numerotarea coloanelor începe de la 1. Pentru un element oarecare al matricei, definim noţiunea de vecin ca fiind acele elementele din matrice aflate în imediata sa apropiere, pe una dintre direcțiile orizontală, verticală sau pe cele două diagonale. Un vecin bun al elementului A[i][j] este un vecin care are aceeaşi valoare cu A[i][j].

Dându-se matricea A, să se determine numărul maxim de vecini buni pe care îi are unul dintre elementele matricei precum și numărul de elemente care au acest număr maxim de vecini buni.

#2175 Factori

Gigel a aflat la matematică definiţia factorialului unui număr natural nenul n. Acesta este produsul tuturor numerelor naturale începând cu 1 şi terminând cu numărul respectiv şi se notează cu n!. Astfel, factorialul numărului natural 6 este 6!=1*2*3*4*5*6 şi este egal cu 720. Factorialele numerelor naturale cresc însă extrem de repede. De exemplu, 7!=5040 în timp ce 10!=3628800.

Fiind un bun matematician, Gigel a imaginat o altă metodă de a indica factorialul unui număr. Astfel, el ştie că un număr natural nenul se poate descompune în factori primi. De exemplu 720 poate fi scris ca 24*32*51. Gigel codifică descompunerea în factori primi astfel: 4 2 1 însemnând faptul că în descompunerea lui 720 în factori primi apare factorul 2 de 4 ori, factorul 3 apare de două ori şi factorul 5 apare o dată. Cu alte cuvinte, Gigel indică pentru fiecare număr prim ≤ n puterea la care acesta apare în descompunerea în factori primi a lui n!.

Scrieţi un program care să citească o secvenţă de numere naturale nenule şi care să afişeze în modul descris în enunţ factorialele numerelor citite.

#2176 Ruleta

Nicuşor este elev în clasa a VI-a şi s-a gândit că este suficient de mare ca să inventeze un joc nou. Are doar o foaie de hârtie şi un pix. Scrie mai întâi n numere naturale în cerc. Acestea formează Ruleta numerelor. Jocul se desfăşoară după următoarele reguli:
- se parcurge şirul numerelor în sensul deplasării acelor de ceasornic;
- se porneşte de fiecare dată de la acelaşi element;
- se execută de fiecare dată o rotaţie completă;
- fiecare element nenul se scade din elementul imediat următor doar dacă este mai mic sau egal cu acesta şi nenul;
- ruleta se opreşte atunci când execută o rotaţie completă şi nu se modifică nici o valoare din şirul elementelor.

Scrieţi un program care să determine, pentru un şir de n numere naturale care indică starea iniţială a ruletei, numărul r de rotaţii complete efectuate respectând regulile jocului până la încheierea acestuia şi numărul t al elementelor nenule aflate în şir la încheierea jocului.

#1097 Placare

O suprafaţă dreptunghiulară de înălţime N şi lăţime M unităţi trebuie acoperită perfect (placată) prin utilizarea unor plăci de formă dreptunghiulară de dimensiune 1 x P sau P x 1, unde P este un număr natural nenul. Suprafaţa dată poate fi privită ca un caroiaj cu NxM pătrăţele egale cu unitatea.

O placare corectă a suprafeţei iniţiale se memorează într-un fişier text folosind următoarele convenţii de codificare:

  • pe prima linie se precizează dimensiunile N şi M ale suprafeţei;
  • o placă dreptunghiulară de laţime P este codificată prin numărul natural P, iar o placă de înalţime P se codifică prin numărul întreg –P;
  • convenim ca placa având ambele dimensiuni egale cu unitatea să se codifice cu valoarea 1;
  • pe fiecare din cele N linii ale codificării se află câte un şir de valori întregi reprezentând, în ordine de la stânga la dreapta, codurile plăcilor care se găsesc amplasate începând de la respectiva linie;
  • codul P strict mai mare ca 1 al unei placi orizontale apare o singură dată pe linia corespunzătoare pe care se află placa, iar codul –P al unei placi verticale va apare o singură dată şi anume pe prima linie de la care placa respectivă este amplasată în jos pe o anumita coloană a suprafeţei;
  • dacă pe o anumită linie a suprafeţei nu există astfel de coduri de plăci, atunci pe respectiva linie din fişier este o singură valoare de 0.

Folosind codificarea unei placări a suprafeţei iniţiale, se poate determina imaginea acestei placări sub forma unui tablou bidimensional A, cu N linii şi M coloane, unde Aij = valoarea absolută a codului plăcii care se suprapune peste pătrăţelul de pe linia i şi coloana j.

Cunoscând codificarea unei placări corecte a suprafeţei date să se obţină imaginea acestei placări (matricea de valori corespunzătoare codificării suprafeţei).

Costel are de rezolvat o temă grea la matematică: având la dispoziţie N numere naturale nenule trebuie să aşeze între acestea 2 operaţii de înmulţire şi N-3 operaţii de adunare, astfel încât rezultatul calculelor să fie cel mai mare posibil. Nu este permisă modificarea ordinii numerelor date.

De exemplu, dacă N=5 şi numerele sunt 4, 7, 1, 5, 3, operaţiile pot fi aşezate 4 + 7 * 1 + 5 * 3, 4 * 7 *1 + 5 + 3, e.t.c

Scrieţi un program care să aşeze două operaţii de înmulţire şi N-3 operaţii de adunare între cele N valori date astfel încât valoarea expresiei obţinute să fie maximă.

#1099 Insule

Arhipelagul RGB este format din insule care aparţin ţărilor R, G şi B. Putem reprezenta harta arhipelagului ca o matrice cu n linii şi m coloane cu elemente din mulţimea {0, 1, 2, 3}. Un element egal cu 0 reprezintă o zonă acoperită de apă; un element egal cu 1 reprezintă o zonă de pământ aparţinând unei insule din ţara R, iar un element egal cu 2 reprezintă o zonă de pământ aparţinând unei insule din ţara G, iar un element egal cu 3 reprezintă o zonă de pământ aparţinând unei insule din ţara B.

Se consideră că două elemente ale matricei sunt vecine dacă ele au aceeaşi valoare şi fie sunt consecutive pe linie, fie sunt consecutive pe coloană. Două elemente aparţin aceleiaşi insule dacă ele sunt vecine sau dacă se poate ajunge de la un element la celălalt pe un drum de-a lungul căruia oricare două elemente consecutive sunt vecine.

Pentru a încuraja relaţiile de colaborare dintre ţările R şi G, se doreşte construirea unui pod care să unească o insulă aparţinând ţării R de o insulă aparţinând ţării G. Podul trebuie să respecte următoarele condiţii:

  • să înceapă pe o zonă cu apă consecutivă pe linie sau coloană cu o zonă aparţinând ţării R;
  • să se termine pe o zonă cu apă consecutivă pe linie sau coloană cu o zonă aparţinând ţării G;
  • să traverseze numai zone acoperite cu apă;
  • oricare două elemente consecutive ale podului trebuie să fie vecine;
  • lungimea podului să fie minimă (lungimea podului este egală cu numărul de elemente traversate de pod).

Dată fiind harta arhipelagului să se determine câte insule aparţin fiecărei ţări, precum şi lungimea minimă a unui pod care să satisfacă condiţiile din enunț.

#1098 Reteta

Mama mea este profesoară de informatică, dar îi place foarte mult să gătească. Recent am descoperit caietul ei de reţete, care arată foarte neobişnuit. Fiecare reţetă este scrisă pe un singur rând pe care sunt precizate produsele folosite, cantităţile, precum şi ordinea în care se execută operaţiile. De exemplu:
(unt 50 zahar 250 ou 4)5
ceea ce înseamnă că se amestecă 50 grame unt cu 250 grame zahăr şi cu 4 ouă timp de 5 minute. Pentru fiecare produs mama foloseşte întotdeauna aceeaşi unitate de măsură, aşa că unităţile de măsură nu mai sunt precizate. Numele produsului este scris întotdeauna cu litere mici, iar produsele şi cantităţile sunt separate prin spaţii (unul sau mai multe). Produsele care se amestecă împreună sunt încadrate între paranteze rotunde; după paranteza rotundă închisă este specificat timpul de preparare.

Evident, mama are şi reţeţe mai complicate:
(((zahar 100 ou 3)5 unt 100 nuca 200)4 (lapte 200 cacao 50 zahar 100) 3)20

Să traducem această reţetă: se amestecă 100 grame zahăr cu 3 ouă timp de cinci minute; apoi se adaugă 100 grame unt şi 200 grame nucă, amestecând totul încă 4 minute. Se amestecă 200 ml lapte cu 50 grame de cacao şi 100 grame zahăr timp de 3 minute, apoi se toarnă peste compoziţia precedentă şi se amestecă totul timp de 20 minute.

Observaţi că înainte sau după parantezele rotunde pot să apară sau nu spaţii.

Dată fiind o reţetă să se determine timpul total de preparare, precum şi cantităţile necesare din fiecare produs.

La o firmă de software se lucrează la un mare proiect. Proiectul constă în executarea a n (n număr natural) faze de dezvoltare, numerotate cu numerele 1, 2, …, n. Unele faze pot fi executate în paralel (în acelaşi timp), însă executarea altor faze nu poate fi începută până când nu se finalizează executarea anumitor faze.

Să se scrie un program care să se determine:

a) timpul minim t în care se poate finaliza executarea proiectului
b) pentru fiecare fază k (k din {1,2,…,n}), momentul de timp ck la care poate începe faza k cel mai devreme, respectiv momentul de timp dk la care poate începe faza k cel mai târziu, fără a influenţa durata totală de executare a proiectului.

#962 Cerc4

Se desenează n cercuri distincte în planul P, numerotate cu numerele de la 1 la n. Pentru fiecare cerc k (k∈{1,2,...,n}) se cunosc: raza cercului, rk, şi coordonatele (xk,yk) ale centrului cercului, coordonate referitoare la reperul cartezian xOy cu originea în punctul O a planului P. Din punctul O, se desenează m drepte distincte, astfel încât pentru fiecare dreaptă, dintre cele m desenate, să existe cel puţin un cerc, dintre cele n, al cărui centru să fie situat pe aceasta şi pentru fiecare cerc desenat, să existe o singură dreaptă, dintre cele m desenate, care să treacă prin centrul lui.

Să se scrie un program care să se determine:
a) numărul m de drepte distincte;
b) cel mai mare număr q de cercuri, dintre cele n, exterioare două câte două, ale căror centre sunt situate pe o aceeaşi dreaptă care trece prin punctul O, dintre cele m desenate;
c) numărul p al dreptelor distincte, dintre cele m desenate, pe care sunt situate centrele a câte q cercuri, dintre cele n, exterioare două câte două.