Sunteți pe pagina 1din 0

Probleme

recapitulative

Probleme propuse
Miniculegere de probleme interesante
Soluiile problemelor propuse
Soluiile problemelor din miniculegere
Capitolul
14


14.1. Probleme propuse

14.1.1. Doi sau trei
Se d numrul natural n. Generai irul format din primele n numere naturale care este
construit prin adunri ale pasului de generare la numrul curent, dup urmtoarele
reguli:
ncepem cu numrul 1 i cu pas 2;
dac ajungem la un numr divizibil cu 3 dar nu i cu 2, continum cu pasul 3;
dac ajungem la un numr divizibil cu 2 dar nu i cu 3, continum cu pasul 2;
dac ajungem la un numr divizibil i cu 2 i cu 3 atunci, n cazul n care pasul este
2 pasul devine 3, iar dac pasul este 3 atunci pasul devine 2.

Programul pe care l vei elabora va trebui s rspund la dou ntrebri:
a) care sunt cele n numere naturale obinute;
b) ci pai au avut lungime 2 i ci au avut lungime 3.

Date de intrare
Se d numrul natural n.

Date de ieire
Se vor afia cele n numere naturale obinute iar apoi, pe linia urmtoare, dou valori
separate prin spaiu, reprezentnd numrul de pai de lungime 2 i numrul de pai de
lungime 3.

Restricii i precizri
2 n 1000.
140 14. Probleme recapitulative

Exemplu
Intrare
n=10
Ieire
1 3 6 8 10 12 15 18 20 22
6 3
Explicaie
se realizeaz 6 pai de lungime 2
i 3 pai de lungime 3.

14.1.2. Numere nrudite
Dou numere naturale le vom considera nrudite dac au aceeai sum a divizorilor
proprii i numerele nu sunt prime. De exemplu, 12 i 26 sunt numere nrudite. 12 are
divizorii proprii 2, 3, 4 i 6 a cror sum este 15 iar 26 are divizorii proprii 2 i 13 a
cror sum este tot 15.
Se dau dou numere naturale, a i b. S se determine toate perechile de numere n-
rudite din intervalul [a..b].

Date de intrare
Se dau dou numere naturale a i b.

Date de ieire
Pe fiecare linie se va afia cte o pereche de numere prietene.

Restricii i precizri
1 a < b 10000;
divizorii proprii ai unui numr sunt toi divizorii ntre 2 i n div 2.

Exemplu
Intrare
a=10
b=30
Ieire
12 26

14.1.3. Fracii continue
Orice numr raional pozitiv poate fi scris sub forma unui ir finit de numere ntregi
utiliznd reprezentarea acestuia sub form de fracii continue. O fracie continu este o
fracie scris sub forma sumei dintre un numr ntreg i un numr raional al crui
numrtor este 1, iar numitorul este scris tot sub forma unei fracii continue.

Exemplu
5
1
1
1
4
6
5
4
6
29
+
+ = + = . Aceast fracie se va reprezenta sub forma (4, 1, 5).
Scriei un program care afieaz reprezentarea sub form de fracie continu a unui
numr raional dat.
14. Probleme recapitulative 141

Date de intrare
Se dau dou numere naturale m i n.

Date de ieire
Se va afia reprezentarea sub form de fracie continu a numrului raional m/n.

Restricii i precizri
1 m < n 10000;

14.1.4. Suma multiplu
Se citesc n numere naturale. S se determine o subsecven format din aceste numere
naturale a crei sum este multiplu de n.

Date de intrare
Se d numrul natural n i n numere naturale.

Date de ieire
Se va afia o subsecven format din valori consecutive ale irului, astfel nct suma
acestor valori s fie un multiplu a numrului n.

Restricii i precizri
2 n 100;
datele de intrare sunt ntotdeauna corecte.

Exemplu
Intrare
n=5
1 3 4 8 7
Ieire

3 4 8
Explicaie
3+4+8=15 care este multiplu de 5

14.1.5. Codificare
Se d un text sub forma unui ir de cel mult 200 de caractere. Vom realiza o codificare
a acestui text dup cum urmeaz: mai nti, nlocuim toate spaiile cu caracterul '&',
apoi aezm pe un cerc, n ordine, toate caracterele cuvntului. Vom parcurge cercul
n mod repetat, cu un pas de lungime k i vom numra caracterele. Dup fiecare num-
rare a k caractere, caracterul la care am ajuns va fi eliminat din ir i va fi trecut n
coada irului codificat. Numrarea continu cu caracterul de dup cel eliminat i se re-
ia pn cnd n irul de codificat a rmas un singur caracter, care este adugat la
sfritul irului codificat.
Scriei un program care realizeaz o asemenea codificare.
142 14. Probleme recapitulative

Date de intrare
Se d un ir de caractere s care conine cel mult 200 de caractere. Apoi se d un numr
natural k, reprezentnd pasul cu care se va realiza numrarea pe ir.

Date de ieire
Se va afia irul codificat conform algoritmului de mai sus.

Restricii i precizri
2 k 100.

Exemplu
Intrare
s='Ana are mere'
k=3
Ieire
'arme&&Aenrae'

14.2. Miniculegere de probleme interesante
Problemele pe care vi le propunem acum nu sunt neaprat probleme foarte dificile, ci
sunt probleme interesante care mbin cunotine din mai multe capitole studiate m-
preun i care necesit puin ingeniozitate n rezolvare.

14.2.1. Ultima cifr (I)
Se d un numr natural n. Determinai ultima cifr a numrului 2
n
.

Date de intrare
Se d un numr natural n.

Date de ieire
Se va afia ultima cifr a numrului 2
n
.

Restricii i precizri
0 n 2000000000.

Exemplu
Intrare
n=5
Ieire
2
Explicaie
2
5

= 32 are ultima cifr egal cu 2.

14.2.2. Ultima cifr (II)
Se dau dou numere naturale, a i b. Determinai ultima cifr a numrului a
b
.

14. Probleme recapitulative 143

Date de intrare
Se dau dou numere naturale, a i b.

Date de ieire
Se va afia ultima cifr a numrului a
b
.

Restricii i precizri
0 a, b 2000000000.

Exemplu
Intrare
a=1711
b=169
Ieire
1


14.4.3. Compactarea tablourilor
Definim operaia de compactare a unui tablou unidimensional ca fiind operaia prin
care se elimin toate elementele egale cu zero din tabloului respectiv. Dac ntlnim
un element egal cu zero, toate elementele situate la dreapta sa vor veni cu o poziie
mai n fa, n locul su.
Se d un tablou cu n elemente numere ntregi. Compactai-l.

Date de intrare
Se d un numr natural n i apoi n numere ntregi, ntre avnd valori cuprinse ntre
-30.000 i 30.000.

Date de ieire
Se va afia tabloul nainte i dup compactare.

Restricii i precizri
1 n 1000.

Exemplu
Intrare
n=10
1 4 0 6 0 0 -4 8 -5 0
Ieire
1 4 0 6 0 0 -4 8 -5 0
1 4 6 -4 8 -5

14.2.4. Controlul de paritate
Se d un tablou bidimensional cu m linii i n coloane ale crei componente sunt egale
cu 0 sau 1. Determinai o matrice cu m + 1 linii i n + 1 coloane care are numr par de
valori egale cu 1 pe fiecare linie i fiecare coloan.

144 14. Probleme recapitulative

Date de intrare
Se dau dou numere naturale m i n i apoi m n valori egale cu 0 sau 1.

Date de ieire
Se va afia matricea rezultat.

Restricii i precizri
1 m, n 100.

Exemplu
Intrare
m=3
n=4
1 0 0 1
1 1 0 1
0 0 1 1
Ieire
1 0 0 1 0
1 1 0 1 1
0 0 1 1 0
0 1 1 1 1
Explicaie
Pe fiecare linie i fiecare coloan
a matricei afiate avem un numr
par de valori egale cu 1.

14.2.5. Spiral
Se d un numr natural n. Afiai de-a lungul unei spirale primele n
2
numere naturale
nenule.

Date de intrare
Se d un numr natural n.

Date de ieire
Se va afia spirala.

Restricii i precizri
1 n 10.

Exemplu
Intrare
n=4
Ieire
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Explicaie
Observai dispunerea numerelor n spiral
ncepnd cu poziia (1, 1) i parcurgnd prima
linie spre dreapta.

14.2.6. Suma irurilor
Se citesc de la tastatur dou variabile de tip string. Aceste variabile conin numai
caractere cifre. Calculai suma celor dou valori.

14. Probleme recapitulative 145

Date de intrare
Se dau dou iruri de caractere.

Date de ieire
Se va afia irul de caractere reprezentnd suma celor dou iruri de caractere date.

Restricii i precizri
irurile iniiale conin cel mult 200 de caractere;
datele de intrare nu sunt obligatoriu corecte;
dac datele de intrare nu sunt corecte se va afia un mesaj corespunztor.

Exemplu
Intrare
s1=12345
s2=13568
Ieire
25913
Explicaie
12345 + 13568 = 25913

14.2.7. Eliminare
Se d un ir de caractere. Eliminai din acest ir toate caracterelele numerice pe care le
conine.

Date de intrare
Se d un ir de caractere.

Date de ieire
Se va afia irul, fr caracterele numerice pe care le conine.

Restricii i precizri
dac irul conine valori reale, acestea se vor scrie utiliznd punct zecimal;
dou valori numerice separate prin virgul reprezint dou numere ntregi i virgu-
la va face parte din irul rezultat.

Exemplu
Intrare
s='Ana are 3 mere'
s='Factorul de multiplicare este 3,5'
s='Factorul de multiplicare este 3.5'

Ieire
Ana are mere
Factorul de multiplicare este ,
Factorul de multiplicare este
146 14. Probleme recapitulative

14.2.8. Expresie
Se d un ir de caractere reprezentnd o expresie matematic care conine numai litere
mici ale alfabetului latin, cifre i simboluri +, -, *, /. Aceast expresie matematic
este corect dac ncepe cu un operand, se termin cu un operand i ntre oricare doi
operanzi se afl un operator, respectiv ntre oricare doi operatori se afl un operand.
Operatorii sunt simbolurile +, -, *, /, reprezentnd cele patru operaii uzuale din
aritmetic.
Un operand este fie o valoare numeric, fie un identificator. Dac operandul este
un identificator, atunci nu este permis ca numele operandului s nceap cu o cifr.
Scriei un program care accept o asemenea expresie i stabilete dac este corect.

Date de intrare
Se d un ir de caractere, reprezentnd o expresie matematic.

Date de ieire
Se va afia mesajul 'Expresie corect' sau mesajul 'Expresie greit'.

Restricii i precizri
irul de caractere conine cel mult 200 de caractere i nu conine spaii;
irul nu conine niciodat alte simboluri n afara celor precizate n enun.

Exemplu
Intrare
s=a+b*2/cinci

s=a+b*n/c-

s=a+b*/c

s=a1*2b
Ieire
Expresie corecta

Expresie gresita

Expresie gresita

Expresie gresita
Explicaie


Se termin cu un operator

Conine doi operatori alturai

'2b' nu este un identificator permis
pentru un operand

14.2.9. De la patru la mai mult
Pornind de la numrul 4 putem construi orice numr natural mai mare dect 4 folosind
urmtoarele reguli:
mprirea cu rest la 2;
adugarea cifrei 4 sau 0 la sfritul numrului.
Se d un numr natural n. S se afieze o succesiune de operaii prin care poate fi
construit acest numr pe baza regulilor de mai sus.
Operaiile vor fi codificate cu 'i' pentru mprire respectiv 'a' pentru adugarea
unei cifre, urmat de '0' sau '4', reprezentnd cifra care se adaug.
14. Probleme recapitulative 147

Date de intrare
Se d un numr natural n.

Date de ieire
Se va afia o succesiune de operaii care conduce la numrul respectiv.

Restricii i precizri
5 n 1000;
datele de intrare sunt ntotdeauna corecte.

Exemplu
Intrare
n=564
Ieire
a4ia4iia4
Explicaie
pornim de la 4 i adugam un 4: 44
mprim la 2: 22
adugm 4: 224
mprim la 2: 112
mprim la 2: 56
adugm 4: 564

14.3. Soluiile problemelor propuse

14.3.1. Doi sau trei
Enunul problemei descrie, de fapt paii algoritmului, care n pseudocod se descrie n
felul urmtor:

Algoritm DoiTrei:
citete n
pas 2
nr 1
scrie nr { afim prima valoare }
pentru i=2,n execut:
nr nr + pas
scrie nr { afim iterativ valori }
dac pas = 2 atunci
pas2 pas2 + 1 { incrementm contoarele pentru pai }
altfel
pas3 pas3 + 1
sfrit dac
dac rest[nr/6] = 0 atunci { determinm pasul de continuare }
dac pas = 2 atunci
pas 3
148 14. Probleme recapitulative

altfel
pas 2
sfrit dac
altfel
dac rest[nr/2] = 0 atunci
pas 2
sfrit dac
dac rest[nr/3] = 0 atunci
pas 3
sfrit dac
sfrit dac
sfrit pentru
scrie pas2, pas3) { afim contoarele pentru pai }
sfrit subalgoritm

14.3.2. Numere nrudite
Pentru ca dou numere s fie nrudite acestea nu trebuie s fie prime i sumele divizo-
rilor lor proprii trebuie s fie egale. Vom genera toate numerele din intervalul dat i
vom verifica proprietatea. Din moment ce ne trebuiesc toi divizorii acestor numere,
vom ncerca s mprim fiecare numr cu toate numerele mai mici sau egale cu jum-
tatea lor. Astfel, dup ieirea din ciclu, vom ti i dac numerele sunt prime sau nu ve-
rificnd sumele. Dac produsul celor dou sume este egal cu 0, nseamn c cel puin
unul din numere este prim.

Algoritm nrudite:
citete a,b
pentru k=a,b execut: { generm toate numerele de la a la b }
pentru i=2,[k/2] execut: { cutm divizori proprii pn la jumtatea }
dac rest[k/i] = 0 atunci { numerelor }
{ corespunztor fiecrui numr memorm suma divizorilor proprii }
sume[k] sume[k] + i
sfrit dac
sfrit pentru
sfrit pentru
pentru i=a,b-1 execut: { traversm irul sumelor divizorilor proprii }
pentru k=i+1,b execut: { i le comparm dou cte dou }
dac (sume[i] = sume[k]) i (sume[i]*sume[k] 0) atunci
scrie i,k
sfrit dac
sfrit pentru
sfrit pentru
sfrit algoritm
14. Probleme recapitulative 149

14.3.3. Fracie continu
Astzi v vei convinge c pentru ca s reuii s devenii buni programatori trebuie s
stpnii foarte bine matematica, n toate detaliile ei.
La orele de matematic nvai s aplicai reguli de rezolvare a problemelor n
funcie de tipul problemei. Pentru a putea utiliza aceste reguli n scrierea programelor
trebuie s stpnii pai de calcul i nu numai, trebuie s cunoatei efectele execuiei
fiecrui pas.
Vom analiza n detaliu exemplul dat:

Numrtor Numitor ntreg Rest Explicaii
29 6 4 5 Fracia 6/5 (numitor/rest) trebuie scris ca
fracie continu.
6 5 1 1 Fracia 5/1 trebuie scris sub form de
fracie continu.
5 1 5 0 Ne oprim pentru c avem rest 0.

Coloana a treia din tabel conine tocmai irul de valori care trebuie s fie afiate.
n descrierea n pseudocod m reprezint numrtorul, iar n numitorul numrului ra-
ional dat.

Algoritmul FracieContinu:
citete m,n
ct timp n 0 execut:
scrie [m/n]
r rest[m/n]
m n
n r
sfrit ct timp
sfrit algoritm

14.3.4. Suma multiplu
S demonstrm mai nti c problema are ntotdeauna o soluie.
Dac una dintre valorile citite este multiplu de n, atunci valoarea respectiv va fi
soluie trivial a problemei. Cazul mai general este cel n care nici una dintre valorile
citite nu este multiplu al numrului n.
Vom calcula irul sumelor pariale corespunztoare subsecvenelor formate din ele-
mentele irului ncepnd cu de la 1 i pn la al i-lea, pentru fiecare valoare i de la 1 la
n. Pentru aceste sume distingem dou situaii:
1. una dintre sume este multiplu de n, deci restul mpririi la n a sumei respective
este 0; dac aceast sum corespunde secvenei de la 1 la i, vom afia primele i
elemente;
150 14. Probleme recapitulative

2. nici una dintre sume nu este multiplu de n, deci vor exista n sume i doar cel mult
n 1 resturi ale mpririi acestor sume la n. Prin urmare, vor exista dou sume
pariale una de la 1 la i i cealalt de la 1 la j care vor conduce la acelai rest al
mpririi cu n. Diferena dintre aceste dou sume este multiplu de n. Deci, va
trebui s afim subsecvena format din elementele de la i +1 la j.

Vom rezolva problema astfel: pentru irul sumelor pariale vom calcula resturile.
Dac n procesul de calcul ntlnim un rest egal cu zero, atunci ne oprim i afim sec-
vena respectiv. Dac nu, continum cu pasul al doilea n care cutm dou sume par-
iale al cror rest al mpririi la n este acelai i realizm afiarea conform punctului
b) de mai sus.
S ilustrm algoritmul pentru exemplul de mai sus:

Index 1 2 3 4 5
Valorile citite 1 3 4 8 7
Sumele pariale 1 4 8 16 23
Resturile mpririi la 5 1 4 3 1 3

Restul 1 este egal cu restul 4, deci vom afia secvena de la 2 la 4. Soluia nu este
unic, aa cum se observ i n exemplu. O alt soluie ar fi subsecvena 8, 7, datorit
faptului c restul 3 este egal cu restul 5 deci, vor fi afiate elementele avnd indicii 4 i 5.

14.3.5. Codificare
Algoritmul de codificare este descris n enunul problemei. Descrierea lui n pseudo-
cod este:

Algoritm Codificare:
citete s,k { textul de codificat i pasul de codificare }
pentru i=1,lungimea lui s execut: { nlocuim spaiile cu & }
dac s[i] = ' ' atunci
s[i] '&'
sfrit dac
sfrit pentru
i 0
ct timp lungimea lui s > 1 execut:
pentru j=1,k execut: { repoziionare }
i i + 1
dac i > lungimea lui s atunci
i 1
sfrit dac
sfrit pentru
14. Probleme recapitulative 151

cod cod + s[i] { adugarea caracterului la sfritului codului }
Delete(s,i,1) { eliminarea caracterului din irul dat }
i i - 1
dac i=0 atunci
i lungimea lui s
sfrit dac
sfrit ct timp
cod cod + s
scrie cod { afiarea rezultatului }
sfrit algoritm

14.4. Rezolvrile problemelor din miniculegere

14.4.1. Ultima cifr (I)
Pentru un numr n mare nu putem calcula 2
n
utiliznd tipuri ntregi, deoarece nu pu-
tem reprezenta rezultatul. Astfel, trebuie s utilizm ceea ce tim despre reprezentarea
numerelor mari. Dar un tablou n Pascal nu poate depi dimensiunea de 64kb, ceea ce
se traduce prin aproximativ 65000 de componente de tip Byte (tot insuficient).

Putem iei din acest impas dac observm urmtoarea regul:
2
0
=1
2
1
= 2 2
2
= 4 2
3
= 8 2
4
= 16
2
5
= 32 2
6
= 64 2
7
=128 2
8
=256

Deci, dac n = 0, atunci ultima cifr a numrului cutat este egal cu 1. Dac n este
numr natural nenul, atunci ultima cifr a numrului 2
n
este aceeai ca i ultima cifr a
numrului 2
rest[n/4]
i anume:
rest[n/4] ultima cifr
0
1
2
3
6
2
4
8

Acum problema a devenit extrem de simpl.

14.4.2. Ultima cifr (II)
n aceast problem este i mai evident c nu putem calcula valoarea cerut, urmrind
s determinm astfel ultima cifr a rezultatului.
Vom iei foarte rapid din impas deoarece ultima cifr a produsului mai multor nu-
152 14. Probleme recapitulative

mere este obinut pe baza ultimei cifre a fiecrui numr, lucru pe care l tii deja. Iar
ridicarea la putere este o nmulire repetat deci, a
b
are aceeai ultim cifr ca i
(rest[a/10])
b
.
Deci, avem de rezolvat o problem similar problemei 1, doar c n locul lui 2 poa-
te fi orice alt cifr.

14.4.3. Compactarea tablourilor
Varianta 1
Parcurgem tabloul i, de fiecare dat cnd ntlnim un element egal cu 0, efectum
o compactare primar. Dac elementul de pe poziia i este egal cu zero, toate elemen-
tele de pe poziiile i + 1..n le deplasm spre stnga i apoi numrul de elemente scade
cu 1. Aceast variant este ineficient din punct de vedere al timpului de execuie.

Varianta 2
Utilizm un al doilea tablou care va avea rolul de variabil auxiliar n compactare.
Vom parcurge vectorul iniial i vom transfera n cel de-al doilea vector toate elemen-
tele nenule. Apoi vom suprascriere vectorul iniial cu vectorul obinut. Aceast varian-
t este mult mai eficient din punct de vedere al timpului de execuie, dar solicit mai
mult spaiu de memorare.

14.4.4. Controlul de paritate
Vom completa a (n + 1)-a coloan dup cum urmeaz: vom scrie 1 dac avem un nu-
mr impar de 1 pe linie i 0 dac avem un numr par de 1. Pentru aceasta, vom calcula
numrul de valori egale cu 1 ca fiind suma valorilor de pe linia respectiv. Dac am
obinut un rezultat impar, atunci scriem 1, dac am obinut un rezultat par scriem un 0.
Vom proceda asemntor i pentru completarea a (m + 1)-a linii.
Apoi vom completa elementul (m + 1, n + 1) folosind fie valorile de pe linia m + 1,
fie valorile de pe coloana n + 1. S observm c se ajunge la acelai rezultat.

Observaie
Acest mod de completare a unei matrice este utilizat frecvent n transmisiile de
date, deoarece permite un oarecare control asupra erorilor i refacerea informaiilor bi-
nare transmise eronat.

14.4.5. Spiral
Vom construi o matrice ptratic cu n linii i n coloane care va conine numerele 1, 2,
3, ..., n
2
n spiral. Vom ncepe cu primul element de pe poziia (1, 1) i ne vom de-
plasa spre dreapta pn cnd ajungem pe a n-a coloan. Apoi ne vom deplasa n jos,
pn ajungem pe a n-a linie, apoi ne vom deplasa spre stnga, pn ajungem pe co-
loana 1, apoi n sus, pn ajungem pe a doua linie. Ne vom deplasa din nou spre
dreapta, pn cnd ajungem pe a (n 1)-a coloan, apoi urmeaz deplasarea n jos etc.
14. Probleme recapitulative 153

14.4.6. Suma irurilor
nainte de a calcula suma celor dou iruri de caractere, va trebui s verificm corecti-
tudinea datelor de intrare. Pentru aceasta, va trebui s verificm dac toate caracterele
fiecruia dintre cele dou iruri sunt doar caractere cifre ('0'..'9').
Vom calcula suma celor dou iruri, folosind un algoritm similar celui pe care l-am
folosit n adunarea numerelor mari. Problema este c de aceast dat, n locul cifrelor,
va trebui s utilizm caracterele irurilor.
Vom determina mai nti care dintre cele dou iruri este mai lung i apoi vom
aduga zerouri nesemnificative n faa irului mai scurt, pn cnd cele dou iruri de-
vin egale. n acest fel, vom alinia cele dou iruri de caractere unul sub altul.
Valoarea cifrei corespunztoare caracterului de pe poziia i se obine scznd din
codul ASCII al caracterului respectiv valoarea 48 (care reprezint codul ASCII al
caracterului '0').

Atenie
Caracterele irului sunt numerotate de la stnga la dreapta, deci, dac irul de ca-
ractere are lungimea n, atunci cifra unitilor se afl pe poziia n, cifra zecilor pe
poziia n 1 .a.m.d.

14.4.7. Eliminare
Varianta 1
Vom folosi o variabil auxiliar de tip ir de caractere i vom transfera treptat toate
caracterele care nu sunt cifre n irul iniial. Fiecare caracter transferat l vom elimina
din irul iniial. Cnd gsim un caracter care este cifr, tim c la nceputul irului
rmas avem un numr care va trebui s fie eliminat. Cu ajutorul procedurii Val deter-
minm pn unde ine numrul i eliminm aceast poriune. Apoi relum algorit-
mul pentru irul rmas.
Aceast variant de rezolvare ridic un semn de ntrebare: ce facem dac avem un
numr natural att de mare nct nu poate fi identificat folosind tipuri ntregi standard?
De asemenea, trebuie s gestionm i o variabil auxiliar.

Varianta 2
Nu vom folosi un ir auxiliar, ci vom prelucra direct irul iniial astfel: eliminm
mai nti toate caracterele '.' care sunt ncadrate de dou caractere care sunt cifre.
Eliminm apoi toate caracterele care sunt cifre.
n aceast variant de rezolvare suntem nevoii s executm dou parcurgeri ale i-
rului, ns nu ne mai intereseaz lungimea numerelor prezente n ir i nici nu mai
trebuie s folosim o variabil auxiliar.


154 14. Probleme recapitulative

14.4.8. Expresie
Pentru validarea expresiei trebuie s verificm dac irul construit respect toate con-
diiile precizate n enun.
Dac irul ncepe sau se termin cu un operator atunci expresia nu este corect.
Dac exist doi operatori alturai atunci expresia nu este corect.
Verificnd cele dou condiii am ncheiat validarea din punct de vedere al operato-
rilor. Mai trebuie s verificm corectitudinea operanzilor. Vom cuta pe rnd subiruri
ale irului iniial i pentru fiecare asemenea subir vom avea urmtoarea regul de
validare: dac ncepe cu un simbol cifr, atunci trebuie s reprezinte un numr natural
corect scris; dac ncepe cu o liter, atunci va fi cu siguran un identificator, conform
precizrilor pe care le-am enunat.

14.4.9. De la patru la mai mult
Este dificil s pornim de la patru i s ncercm s ajungem la numrul n dat, ns vom
simplifica problema privind-o n oglind: de la orice numr natural se poate ajunge
la numrul 4, dac folosim numai nmulirea cu 2 i eliminarea ultimei cifre dac
acesta este 0 sau 4.
Vom utiliza un tablou unidimensional n care vom construi irul valorilor pe care le
obinem cu scopul de a ajunge la numrul 4, astfel:
pe prima poziie a tabloului vom insera numrul dat;
pe urmtoarele poziii vom scrie numerele dup cum urmeaz: dac numrul de pe
poziia i se termin cu 0 sau 4, atunci pe poziia i + 1 inserm numrul format prin
eliminarea ultimei cifre; dac ultima cifr nu este 0 sau 4, pe poziia i + 1 vom inse-
ra dublul numrului de pe poziia i.

Dup ce am ajuns la numrul 4, vom parcurge n sens invers irul de valori din ta-
blou i vom afia codurile operaiilor efectuate.
Aceast abordare ne d garania c vom obine ntotdeauna o soluie, ns nu i ga-
rania c soluia obinut este format prin numrul minim de operaii. Problema deter-
minrii unei soluii optime din punct de vedere al numrului de operaii nc ne de-
pete cunotinele.

S-ar putea să vă placă și