Sunteți pe pagina 1din 24

1.

Algoritmi

1. Algoritmi
Expresii
1.1. Evaluai u r m t o a r e l e expresii:
a) a + 7 5 / b / c - a * 3 . Ounde a = 3 , b = 3 , c = 2 . 5
b) a * b / 2 * c
/ 3unde a = 4 , b = 6 , c=0 . 1
C) 4 / a * a * a u n d e a = 2
d) (n d i v 10 d i v 10 - D / 1 0 * 10, unden=2112
e) (n d i v 100) mod 10 + (n mod 100) d i v 10, unden=1234
f) (n mod 1000) d i v 100 + (n d i v 1000) mod 10, u n d e n = 2 3 6 1 9
g) (n mod 2 = 1) a n d ( ( n < 1 0 ) o r (n> = 1 0 0 ) ) , u n d e n=89
h) (n mod 2 = 1) o r ( ( n > 1 0 ) a n d ( n < 1 0 0 ) ) , u n d e n=98
i) n o t (a>100 a n d a < 2 0 0 ) = n o t (a>100) o r n o t ( a < 2 0 0 ) , unde a=150
j ) n o t ( (n mod 2 = 0) o r (n<10) ), unde n=27
k) (n mod 3 = 0) a n d (n mod 5 = 0) o r (n mod 7 = 0 ) , u n d e n = 5 6
1) n - (n d i v 1 0 ) * 1 0 = n mod 10, unde n=1234
m) (100 - y * y - 3 * y ) / ( x * x ) - y*y, undex=6, y=4
n) n o t (a<b) a n d n o t ( b < = c) o r ( 3 1 mod c = 33 mod b) o r ( ( a - b ) * ( b c ) * ( c - a ) ) ( u n d e a = 3 , b = 5 , c=7
0) ( a - b ) * ( b - a ) <0, unde a i b sunt numere naturale strict pozitive i diferite
p) n o t ( a * a / ( a + a ) < a ) , u n d e a = 5
q) (n mod 1 0 0 0 0 ) * 1 0 + n d i v 10000, unden=12345
r) (n d i v 1000 = 0) a n d (n d i v 100 >0), unde n este numr natural de 3 cifre
S) l / a + l / b + a*b, undea=0 . 1 i b=0 . 2
1.2. Dac a , b ,
c,
d sunt variabile ntregi, a = l ,
urmtoarele expresii f u r n i z e a z rezultatul true:
a) (a < b) o r (c < d)
b) (b*c < d*d) a n d (d - b * c < 0)
c) n o t ( a > b) o r n o t (d < a)
d) (a+d = b+c) a n d n o t ( d - b != c - a )
e) c*d mod 7 ^ (a+d) mod 7
f ) (b < c) a n d (c > d) o r (a < d)
g) n o t (a < c) o r n o t (a+c = 2*b)
h) d / c = c / b
1) d d i v c = c d i v b

b=2,

c =3 ,

d = 4 , care din

Structura liniar
1.3. Care din u r m t o a r e l e operaii atribuie variabilei c u n a din cifrele lui n , tiind c n
este numr natural de exact 5 cifre:
a) c n d i v 10000
b) c - n mod 100
c) c - n d i v 100 mod 10
d) c - n mod 100 d i v 10
e) c <- n - n d i v 10 *10
5

1. Algoritmi
f)
g)
h)
i)
j)
k)

c
c
c
c
c
c

< n n d i v 10000 *10000


n d i v 100 d i v 100
^ n mod 10000 d i v 1000
(n d i v 10) * 10 mod 10
<- n mod 10000 d i v 1000 mod 100 d i v 10
n d i v 10 mod 1000 d i v 10 mod 100 d i v 10 mod 10

1.4. Ce afieaz urmtoarele secvene:


2

a) a
b 5
a a
b a
a
a
scrie

+ b
- b
- b
a, b

b) n 1234
a <- n mod 100 d i v 10 + n d i v 100 mod 10
scrie a
c) n * 2 5 0 0 0
b .- n mod 1000
scrie b

1.5. Ce valoare va avea variabila logic a dup execuia secvenei:


<- 72
^ 2
(n mod p = 0) a n d (n mod (p*p) = 0) a n d (n mod (p*p*p)
(n mod ( p * p * p ) = 0)
^ x = y

n
p
x
y
a

= 0)

1.6. Se citesc dou numere reale a i b . S se determine media aritmetic i me


geometric a celor dou numere.
1.7. Fie a l , a 2 , a 3 trei numere reale. S se interschimbe circular valorile lor de
stnga la dreapta. De exemplu, dac a l = 2 . 9 ,
a2 =3 . 1 ,
a 3 = 5 . 5 , atunci di
interschimbare, a l = 5 . 5 , a 2 = 2 . 9 , a 3 = 3 . 1
1.8. Se citesc dou numere reale strict pozitivea i b reprezentnd lungimea i respei
limea unui dreptunghi. S se determine aria i perimetrul dreptunghiului.
1.9. Se citesc dou numere reale pozitive nenule a i b reprezentnd lungimile catet
unui triunghi dreptunghic. S se determine aria i perimetrul triunghiului.
1.10. Se citete un numr natural n de cel puin patru cifre. S se determine sum
produsul cifrei sutelor i miilor. De exemplu, pentru n = 1 2 7 9 3 , suma cerut este 9
produsul 1 4 .

1. Algoritmi
1.11. Se citete un numr natural n de exact trei cifre. S se determine suma cifrelor lui
n. De exemplu, pentru n = 2 5 1 , suma cifrelor este 8.
1.12. Se citete un numr natural n de cel puin patru cifre. S se determine suma dintre
cifra zecilor i cifra miilor. De exemplu, pentru n = 3 4 7 2 1 , suma cerut este 6.
1.13. Se citete un numr natural n . S se afieze valoarea 1 dac n este impar i 0 dac
n este par. De exemplu, dac n = 3 4 , se va afia 0, iar dac n = 1 2 3 , se va afia 1.
1.14. Se citete un numr natural nenul n. S se calculeze sumele:
a) Si = 2 + 4 + . . . + 2n
b) S2 = 1 + 3 + . . . + ( 2 n - l )
1.15. Scriei un algoritm care citete un numr real x i calculeaz expresia E = x + x 2 + x 4
1.16. Se citesc numerele naturale a i b de pariti diferite (adic a este par i bimpar
sau invers: a este impar i b par) i cu a < b . Scriei un algoritm care s determine
numrul numerelor pare din intervalul [ a , b ] .
Structura alternativ
1.17. Scriei un algoritm care citete trei numere reale x , a , b i afieaz mesajul
Aparine intervalului dac x este n intervalul nchis [ a , b ] , sau mesajul Nu aparine
intervalului, n caz contrar.
Rezolvare:
c i t e t e x, a , b
a n d (x <=b) a t u n c i
r daca (x >= a)
scrie"Aparine intervalului"
| altfelscrie"Nu aparine intervalului"

1.18. Se citesc trei numere ntregi nenule a , b , c . S se verifice dac acestea au


acelai semn.
Rezolvare:
Soluia se bazeaz pe faptul c dac dou numere ntregi nenule au acelai semn
atunci produsul lor este strict pozitiv.
c i t e t e a, b, c
(a*b > 0) a n d ( b * c > 0) a t u n c i
r daca
s c r i e " A u a c e l a i semn"
| a l t f e l s c r i e " N u a u a c e l a i semn"

1.19. Se citete un numr natural nenul n. S se determine cifra unitilor numrului 3 n .


Rezolvare:
Exist patru cazuri:
7

1. Algoritmi
-n
-n
-n
-n

=
=
=
=

4 k: ultima cifr a lui


4 k + l : ultima cifr a
4 k + 2 : ultima cifr a
4 k + 3 : ultima cifr a

3n
lui
lui
lui

este 1
3 n este 3
3 n este 9
3 n este 7

citete n
atunciscrie"1"
r d a c a n mod 4 = 0
altfel
|- d a c a n mod 4 = 1 a t u n c i s c r i e " 3"
a l t f e l |- d a c a n mod 4 = 1 a t u n c i s c r i e " 9"
altfelscrie"7"

Lfl
Lfl

1.20. Se citete un numr natural nenul n. S se calculeze suma:


S = 1 - 2 + 3-4+5-6+...+ ( - 1 ) n+1 n
Rezolvare:
Exist dou cazuri:
- n = 2 k : atunci S se scrie n forma 1 - 2 + 3 - 4 + . . . + ( 2 k - l ) - 2 k , deci S = - ( n

div

2)

- n = 2 k + l : atunci S se scrie n forma 1 - 2 + 3 - 4 + . . . + ( 2 k - l ) - 2 k + ( 2 k + l ) ,


S=(n d i v 2 ) + n

deci

citete n
(n mod 2 = 1 )
rdaca
a t u n c i s - - (n d i v 2)
a l t f e l s * n (n d i v 2)

1.21. Se citesc numerele reale nenule a , b , c , d,cel puin unul din numere fiind
pozitiv i cel puin unul negativ. S se determine suma numerelor pozitive i produsul
celor negative.
Rezolvare:
citete

a, b, c, d
S 4 0
P - 1
(a > 0) a t u n c i s s + a
rdaca
a l t f e l p p*a

(-daca (b > 0) a t u n c i s s + b

a l t f e l p - p*b
[-daca

(c > 0) a t u n c i s
a l t f e l p p*c

s + c

(-daca

(d > 0) a t u n c i s
altfel p
p*d

s + d

s c r i e s,

1. Algoritmi
1.22. Se citete un numr natural n. S se verifice dac n este sau nu numr par de trei
cifre.
Rezolvare:
citete n
(n mod 2 = 0) a n d (n >= 100) a n d (n <= 999) a t u n c i
r daca
s c r i e " n e s t e p a r de t r e i c i f r e "
| a l t f e l s c r i e " n nu e s t e p a r d e t r e i c i f r e "

1.23. Se citesc numerele naturale a i b , a < b . S se determine numrul numerelor pare


din intervalul [ a , b ] .
Rezolvare:
Analizm urmtoarele cazuri:
- a i b sunt impare; atunci numrul de numere pare este ( a - b ) d i v 2
- a i bsunt pare; atunci numrul de numere pare este ( a - b ) d i v 2 + 1
- a i bsunt de pariti diferite; atunci numrul de numere pare este ( a - b ) d i v
1
Se observ c ultimele dou cazuri sunt identice.
c i t e t e a, b
(a mod 2 = 1 ) a n d (b mod 2 = 1 )
r daca
k <- (b - a) d i v 2
| a l t f e l k - (b - a ) d i v 2 + 1

2 +

atunci

scrie k

1.24. Se citesc cinci numere naturale a , b , c , d i x unde a < b < c < d . S se verifice
dac x este ntr-unui din intervalele [ a , b ] sau [ c , d ] .
1.25. Se citesc trei numere naturale a ,
sunt numere naturale consecutive.

b,

c , unde a < b < c . S se verifice dac acestea

1.26. Se citete un numr natural n . S se verifice dac n este numr natural par
divizibil cu 3 i care are cifra zecilor 7.
1.27. Se citesc dou numere naturale a i b , a < b . S se verifice dac ele sunt numere
impare consecutive.
1.28. Se citesc dou numere naturale de trei cifre a i b , a < b . Cte numere naturale care
au cifra unitilor 0 sunt n intervalul [ a , b ] .
1.29. S se determine cifra maxim a unui numr natural de 3 cifre.
1.30. Se citete numrul natural n. S se determine cifra unitilor numrului 2 n .

1. Algoritmi
1.31. Se citete numrul natural n de 3 cifre. S se verifice dac toate cifrele lui n sunt
identice.
1.32. Se citete numrul natural n. S se verifice dac n este o putere a lui 2 din
intervalul [ 1 0 0 , 1 0 0 0 ] ,
Rezolvare:
Numerele care ndeplinesc condiiile cerute sunt 1 2 8 , 2 5 6 , 5 1 2 . Se citete
n i se verific dac este sau nu unul din ccle trei valori.
1.33. Se citete un numr real x . S se determine i s se afieze modulul lui x .
Structuri repetitive
1.34. Scriei un algoritm care citete un numr natural i determin suma cifrelor sale.
Rezolvare:
citete n
s 0
|-cat t i m p n # 0 e x e c u t a
s <- s + n mod 10
n .- n d i v 10

L*
scrie

Soluia a doua utilizeaz structura repetitiv cu test final:


citete

n
3
0
l-repeta
s s + n mod 10
n
n d i v 10
'-pana cand n = 0
scrie s

1.35. Scriei un algoritm care citete un numr natural i i determin cifra maxim.
Rezolvare:
citete n
c i f m a x <- 0
timp n # 0 executa
rcat
c i f <- n mod 10
n n d i v 10
| r d a c a (cif > cifmax) a t u n c i
| | cifmax - c i f

I
scrie

^
cifmax

1.36. Scriei un algoritm care citete un numr natural n i verific dac cifrele lui sunt
n ordine cresctoare ncepnd de la cifra unitilor. Un astfel de numr este 5 3 3 0.
10

1. Algoritmi

Rezolvare:
citete n
cresctor
true
cif
1
f-cat t i m p (n !=0) a n d c r e s c t o r
c <- n mod 10
(c < c i f ) a t u n c i
rdaca
c r e s c t o r <- f a l s e
| a l t f e l cif c

executa

La
n <- n d i v

10

r daca

cresctor atunci
scrie "Cifrele sunt in ordine crescatoare"
altfel
s c r i e " C i f r e l e nu s u n t i n o r d i n e c r e s c a t o a r e "

La
1.37. Scriei un algoritm care citete un numr natural i determin oglinditul su. De
exemplu, oglinditul numrului 8 2 6 este 6 2 8.
Rezolvare:
citete n
ogl - 0
(n ^ 0) e x e c u t a
rcat timp
c n mod 10
n - n d i v 10
ogl - ogl*10 + c

La
scrie

ogl

1.38. Se citete un numr natural nenul. S se determine cifrele distincte care apar n
acest numr.
Rezolvare:
Se caut fiecare cifr n parte dac este printre cifrele numrului.
citete n
0,9 executa
rpentrucif
gsit false
k n
t i m p (k != 0) a n d ( n o t g s i t ) e x e c u t a
rcat
(k mod 10 = c i f ) a t u n c i
rdaca
g s i t <- t r u e

La
k - k d i v 10

La
pdaca g s i t
scrie

atunci
cif

La
La

11

1. Algoritmi
1.39. Scriei un algoritm care citete un numr natural nenul care are un numr impar de
cifre i afieaz numrul obinut prin eliminarea cifrei din mijloc. De exemplu, pentru
n = 1 2 3 4 5 , se va afia 1 2 4 5 .
Rezolvare:
Se va determina mai nti numrul de cifre. Fie k acest numr. Vom elimina cifra de pe
poziia k d i v
citete
m <- n

2 + 1.

k 0
pcat timp
k m
tm
m - 1
rpentru i
m

m > 0 executa
k+1
m d i v 10

l , k div 2 executa
m * 10

n
(n d i v m d i v 10)
scrie n

* m + n mod 10

1.40. S se genereze toate numerele de cinci cifre care au cifrele zecilor, sutelor i
miilor egale, iar cifra unitilor s fie strict mai mic dect 5.
Rezolvare:
^-pentru i <- 1 , 9 e x e c u t a
| ppentru i
0, 9 e x e c u t a
| rpentru i ^ 0,4 executa
| | s c r i e i*10000 + j*(1000+100+10)+k
I I 1 -

1.41. Se citete un numr natural nenul n i apoi un ir de n numere reale. S se


calculeze suma numerelor pozitive i produsul celor negative.
Rezolvare:
citete n
S - 0
P - 1
l - p e n t r u i <- l , n e x e c u t a
|citete x
| f-daca (x < 0) a t u n c i
|
P - P*x
| altfel
S
S + x

s c r i e S,

12

1. Algoritmi
1.42. Scriei un algoritm care citete dou numere naturale nenule a i b i determin
cel mai mare divizor comun al lor. De exemplu, pentru a = 1 5 ,
b=12,
cmmdc(a,b)=3.
Rezolvare:
n prima soluie se vor folosi scderile repetate:
c i t e t e a, b
|-cat t i m p (a
| rdaca a > b
a
||
altfel
|
b

!= b) e x e c u t a
atunci
a - b
- b - a

I ^
scrie a

0 soluie mai bun utilizeaz algoritmul lui Euclid:


c i t e t e a, b
|-cat t i m p b ^ 0 e x e c u t a
r a mod b
a <- b
b
r

La
scrie a

1.43. Se citete un numr natural n mai mare sau egal cu 2. S se verifice dac n este
sau nu prim.
Rezolvare:
Se caut divizori proprii printre numerele de la 2 la n d i v 2. Dac exist
mcar unul, n nu este prim.
citete
prim
l-pentru
| rdaca

n
true
i <- 2 , n d i v 2 e x e c u t a
(n mod i = 0) a t u n c i
prim f a l s e

La
atunci
rdaca p r i m
scrie"Numrul e s t e prim"
| altfel
s c r i e " N u m r u l nu e s t e p r i m "
La
0 a doua soluie mai bun este urmtoarea. Dac p este divizor al lui n, atunci i k = n
d i v p este divizor al lui n i n plus p * k = n . De aceea se vor cuta posibilii divizori ai
lui n printre numerele de la 2 la radical din n.

13

1. Algoritmi
citete
prim
rpentru
| rdaca

n
true
i - 2, s q r t ( n ) e x e c u t a
(n mod i = 0) a t u n c i
prim
false

I1"
a
atunci
rdaca prim
s c r i e "Numrul e s t e p r i m "
altfel
s c r i e " N u m r u l nu e s t e p r i m "
mbuntim n continuare algoritmul, observnd c 2 este singurul numr prim care
este par. Vom cuta deci eventualii divizori proprii printre numerele impare cuprinse
ntre 3 i s q r t ( n ) . n plus, dac este gsit un di vizor, structura repetitiv trebuie s se
opreasc.
citete n
rdaca n = 2 atunci
scrie"Numarul e s t e prim"
jaltfel
atunci
r d a c a n mod 2 = 0
s c r i e " N u m a r u l nu e s t e p r i m "
altfel
i <- 3
c a t t i m p ( i * i <=n) a n d (n mod i = 0)
i - i + 2
este
rdaca i*i>n atunciscrie"Numarul
a l t f e l s c r i e " N u m a r u l nu e s t e p r i m "

executa

prim"

1.44. Scriei un algoritm care citete un numr natural i determin cifra par maxim a
acestui numr. Dac numrul nu are nicio cifr par, se va afia un mesaj.
1.45. Scriei un algoritm care citete un numr natural i determin cea mai mare cifr a
numrului i de cte ori apare.
1.46. Scriei un algoritm care citete un numr natural n i o cifr k i determin de cte
ori apare cifra k n numrul n.
1.47. Scriei un algoritm care citete un numr natural n i verific dac neste sau nu
egal cu suma ptratelor cifrelor lui n.
1.48. Scriei un algoritm care citete un numr natural care are un numr impar de cifre.
S se afieze cifra din mijloc a numrului.
14

1. Algoritmi
1.49. Scriei un algoritm care citete un numr natural ni afieaz permutrile circulare
ale numrului. De exemplu, pentru n = 1 2 3 4 5, se vor afia: 1 2 3 4 5 ,
51234,
45123, 3 4 5 1 2 ,
23451.
1.50. Scriei un algoritm care citete un numr natural n i determin numrul maxim
obinut din nprin eliminarea unei singure cifre. De exemplu, pentru n = 9 8 3 4, se va
afia 9 8 4 , iar pentru n = 7 4 9 1 , se va afia 7 9 1 .
1.51. Scriei un algoritm care citete un numr natural ni determin numrul obinut
numai din cifrele pare ale lui n. De exemplu, pentru n = 5 4 3 8 4 , se va afia 4 8 4 .
1.52. Scriei un algoritm care citete un numr natural ni determin numrul obinut
prin eliminarea tuturor cifrelor zero. De exemplu, pentru n = 2 0 3 0 0, se va afia 2 3 .
1.53. Scriei un algoritm care citete un numr natural i verific dac acesta este
palidrom. Un numr este palindrom dac cifrele sale egal deprtate de extremiti sunt
egale. De exemplu, 3 1 1 3 i 3 6 7 6 3 sunt numere palindrom.
1.54. Scriei un algoritm care citete un numr natural ni determin cifra de control a
lui n. Cifra de control de obine astfel: se determin suma cifrelor lui n . Dac aceast
sum este mai mare sau egal cu 1 0 , se calculeaz suma cifrelor sumei. Procedeul se
repet pn cnd se obine o sum strict mai mic dect 1 0 . De exemplu, pentru
n=783, 7 + 8 + 3 = 1 8 , 1 + 8 = 9, deci cifra de control este 9.
1.55. Se citesc dou numere naturale nenule m i n. S se determine cifrele distincte ale
lui m care nu apar n n.
1.56. Fie a i b dou numere naturale nenule. S se calculeze produsul a * b fr a
efectua efectiv nmulirea.
1.57. Scriei un algoritm care citete un numr natural n i determin cel mai mare
numr natural p cu proprietatea c n este mai mare sau egal cu 2 P . De exemplu, pentru
n=3 0, numrul p cutat este 4, deoarece n > = 2 4 , dar n < 2 5 .
1.58. Scriei un algoritm care citete un numr natural n i determin cel mai mare
numr natural p cu proprietatea c n este divizibil cu 2 P . De exemplu, pentru n = 2 4 ,
numrul p cutat este 3, deoarece n este divizibil cu 2 3 , dar nu este divizibil cu 2 4 .
1.59. Scriei un algoritm care citete un numr natural n i apoi n numere ntregi i
determin numrul maxim citit. De exemplu, pentru n = 5 i numerele 3 , - 5 5 ,
2,
12, 4, numrul maxim este 1 2 .
15

1. Algoritmi
1.60. Scriei un algoritm care citete un numr natural n i apoi n numere naturale
nenule i determin numrul maxim p cu proprietatea c produsul celor n numere este
divizibil cu 3 P . De exemplu, pentru n = 5 i numerele 2 7 , 1 5 , 1 6 , 5 4 , 7, numrul
p maxim cutat este 6.
1.61. Scriei un algoritm care citete un numr natural n i apoi n numere ntregi i
determin suma numerelor care sunt pozitive, pare i divizibile cu 3.
1.62. Se citesc un numr natural n i un numr real strict pozitiv x . S se calculeze x11.
1.63. Scriei un algoritm care citete un numr natural n i determin divizorii proprii ai
lui n.
1.64. Scriei un algoritm care citete un numr natural i realizeaz descompunerea sa n
factori primi. Se vor afia factorii i exponenii descompunerii.
1.65. Scriei un algoritm care citete dou numere naturale nenule a i b i determin
cel mai mic multiplu comun al lor. De exemplu, pentru a = 1 5 ,
b=12,
cmmmc ( a , b ) = 6 0 .
1.66. Scriei un algoritm care citete un numr natural n > = 2 i apoi n numere naturale
nenule i determin cel mai mare divizor comun al celor n numere.
1.67. Scriei un algoritm care citete un numr natural n i verific dac n este sau nu
superprim. Un numr este superprim dac toate prefixele sale sunt numere prime. De
exemplu, 2 3 3 este superprim, deoarece 2 , 2 3 , 2 3 3 sunt prime.
1.68. S se afieze toate numerele naturale nenule mai mici dect un numr natural n i
prime cu n. Spunem c dou numere naturale a i b sunt prime ntre ele dac
cmmdc ( a , b ) =1.
1.69. Se citete un numr natural nenul M. S se afieze toate numerele prime mai mici
sau egale cu M.
1.70. Scriei un algoritm care citete un numr natural n i determin cel mai mic numr
natural strict mai mare dect n care este prim.
1.71. Scriei un algoritm care citete dou numere naturale n , b ( 2 < = b < = 9) i l
convertete pe n n baza b. De exemplu, pentru n = 1 4 i b = 3 , rezultatul va fi 1 1 2 ( 3 ) .

16

1. Algoritmi
1.72. Scriei un algoritm care citete dou numere naturale n , b unde 2 < = b < = 9 i l
convertete pe n din baza b n baza 1 0 . De exemplu, pentru n = 1 1 2 i b = 3 , rezultatul
va fi 14(io).
1.73. Se citesc dou numere naturale n i b , unde 2 < = b < = 9. S se verifice dac n este
un numr reprezentat n baza b , adic dac toate cifrele sale sunt strict mai mici ca b.
1.74. S se afieze toate numerele naturale de patru cifre care au cifra zecilor 2, 3 sau 4
i suma cifrelor numrului este numr par. Un astfel de numr este 3 3 4 0.
1.75. S se afieze toate numere naturale de cinci cifre, numere divizibile cu 3 i n care
suma dintre cifra zecilor i unitilor este exact 8.
1.76. Se citete de la tastatur un numr natural n . S se afieze al n-lea termen al
irului Fibonacci. irul Fibonacci este definit astfel:
f0=fi=l
f n = f n - i + f n - 2 > pentru orice n > = 2
Primii 6 termeni ai irului sunt deci: 1 ,

1,

2,

3,

5,

8.

1.77. Se citete un numr natural nenul n . S se determine cel mai mare numr care este
termen al irului Fibonacci i care este mai mic sau egal dect n.
1.78. Se citete un numr natural nenul n. S se verifice dac n este sau nu termen al
irului Fibonacci.
1.79. Se citete un numr natural nenul n. S se scrie n ca sum de termeni distinci ai
irului Fibonacci.
1.80. Se consider irul de numere 1 , 2 , 2 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , . . . S se
deduc modul n care se genereaz termenii irului i s se determine ce numr este pe
poziia n n acest ir, unde n se citete.
1.81. Se d urmtorul ir de numere: 1 , 1 , 2 , 1 , 2 , 3 , 1 , 2 , 3 , 4 ,
1,
2, 3 , 4 , 5 . . . S se deduc modul n care se genereaz termenii irului i s se
determine ce numr este pe poziia n n acest ir, unde n se citete.
1.82. Se consider ecuaia de gradul al doilea a x 2 + b x + c = 0, unde a , b , c sunt
numere reale, iar a este nenul. Fr a calcula efectiv rdcinile ecuaiei, s se calculeze
suma:
S n = xx11 + x 2 n , unde n este numr natural care se va citi.

17

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului

2. Elemente
limbajului

de

baz

ale

limbajului

C/C++.

Instruciunile

Instruciunile liniar i alternativ


2.1. Se citesc numerele reale a i b . S se rezolve ecuaia a x + b = 0 .
Rezolvare:
int
raain()

double a, b;
c o u t <<"a = "; c i n >> a ;
c o u t <<"b = "; c i n >> b ;
i f (a == 0)
i f (b == 0) c o u t < < " I d e n t i t a t e " ;
e l s e c o u t <<"Nu e x i s t a s o l u i i " ;
e l s e cout <<"Soluie unica = "<<-b/a;
r e t u r n 0;

2.2. Se citete un numr real x . S se afieze modulul lui x .


Rezolvare:
i n t main()
{
double x;
c o u t <<"x = "; c i n >> x ;
i f (x < 0) x = - x ;
c o u t << x ;
r e t u r n 0;

}
2.3. Se citesc dou numere ntregi a i b . S se afieze maximul dintre ele.
Rezolvare:
i n t main()
{
i n t a , b, maxim;
c o u t <<"a = "; c i n >> a ;
c o u t <<"b = "; c i n >> b ;
i f (a > b) maxim = a ;
e l s e maxim = b ;
c o u t <<"max("<<a<<","<<b<<")="<<maxim;
r e t u r n 0;

}
2.4. Scriei o expresie care furnizeaz rezultatul 1 dac cel puin una din variabilele
ntregi a , b , c este pozitiv, sau furnizeaz rezultatul 0 dac toate cele trei variabile
sunt negative.
Rezolvare:
(a > 0) | | (b > 0 | | (c > 0)
18

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului


2.5.Se citete un numr natural n. S se afieze produsul dintre cifra zecilor i cifra
sutelor. De exemplu, dac n = 2 4 7, atunci se va tipri 8, iar dac n = 2 9, atunci rezultatul
este 0, pentru c cifra sutelor este 0.
Rezolvare:
cin >> n;
cout << (n / 10 % 10) * (n / 100 % 1 0 ) ;
2.6. Se citesc dou numere ntregi a i b. S se interschimbe valorile lui a i b.
Rezolvare:
Prima soluie utilizeaz o variabil auxiliar:
cin >> a >> b ;
aux = a ;
a = b;
b = aux;
A doua rezolvare nu folosetenicio variabil auxiliar:
cin >> a >> b ;
a = a + b;
b = a - b;
a = a - b;
2.7. Se consider trei numere ntregi. Utiliznd operatorul condiional, s se determine
valoarea maxim dintre ele.
Rezolvare:
i n t main()
{
i n t a , b, c , maxim;
c i n >> a >> b >> c ;
maxim = (a > b ? a : b) ;
maxim = (maxim > c ? maxim : c ) ;
cout << maxim;
r e t u r n 0;

}
2.8. Se citete un numr natural s mai mare sau egal cu 2. S se determine numrul
minim de valori 2 i 3 care adunate dau suma s . De exemplu, s = 1 0 = 2 + 2 + 3 + 3 , deci
doi de 2 i doi de 3. Pentru s = 1 4 , atunci 1 4 = 2 + 3 + 3 + 3 + 3, adic un 2 i patru de 3.
Rezolvare:
Avem urmtoarele cazuri:
I. s mod 3 = 0. Atunci s se scrie ca s / 3 de 3.
II. s mod 3 = 1. Atunci s se scrie ca doi de 2 i ( s - 4 ) / 3 de 3.
III s mod 3 = 2. Atunci s se scrie ca un 2 i ( s - 2 ) / 3 d e 3 .
i n t main()

<

i n t s, r ;
cin >> s ;
r = s % 3;
switch (r)
19

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului

{
c a s e 0: c o u t " z e r o de 2 s i "<< s / 3 <<" de 3 " ; b r e a k ;
c a s e 1: c o u t < < " d o i de 2 s i "<< ( s - 4 ) / 3 <<" de 3 " ; b r e a k ;
c a s e 2: c o u t " u n 2 s i "<< ( s - 2 ) / 3 <<" de 3 " ; b r e a k ;
}
return
}

0;

2.9. Se citesc dou numere naturale a i b. S se determine media lor aritmetic.


Rezolvare:
i n t a, b;
d o u b l e m;
c i n >> a >> b ;
m = (a + b) / 2 . 0 ;
c o u t << m;
n cazul n care valorile a i b sunt mari, atunci este posibil ca valoarea a + b s
depeasc valoarea maxim admis de tipul i n t . Un astfel de caz este atunci cnd
a = 2 0 0 0 0 0 0 0 0 0 , iar b = 1 5 0 0 0 0 0 0 0 0 . Soluia este n acest caz:
i n t a, b;
d o u b l e m;
c i n >> a >> b ;
m = b+(a-b)/2.0;
c o u t << m;
2.10. Se citete un caracter. S se determine codul su ASCII.
Rezolvare:
i n t n;
char ch;
c i n >> c h ;
n = ch ;
c o u t << n ;
2.11. Se citete ntr-o variabil c d e tip char o cifr. S se memoreze ntr-o variabil n de
tip int valoarea corespunztoare cifrei citite. De exemplu, d a c c = 1 5 1 , atunci n = 5 .
Rezolvare:
Din codul ASCII al lui c scdem codul ASCII al caracterului ' 0 ' . Rezultatul
este chiar cifra cutat.
char c;
i n t n;
c i n >> c ;
n = c - '0' ;
c o u t << n ;
2.12. Se citete un numr natural nenul n. S se afieze dou numere pare care sunt cele
mai apropiate de n. De exemplu, pentru n = 7 , se vor afia 6 i 8. Pentru n = 1 0 , se vor
afia 8 i 1 2 .
20

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului


2.13. Se citesc trei numere naturale x , y i z.S se verifice dac acestea pot fi lungimile
laturilor unui triunghi dreptunghic. De exemplu, x = 6 , y = 1 0 ,
z = 8 pot fi laturile
2
2
2
unui triunghi dreptunghic pentru c 6 + 8 = 1 0 .
2.14. Scriei o expresie care furnizeaz rezultatul 1 dac variabilele ntregi x , y , z
dau resturi diferite prin mprire la 5, sau furnizeaz rezultatul 0 dac cel puin dou
din variabile dau acelai rest prin mprire la 5.
2.15. Se citete un numr natural n de dou cifre. S se afieze oglinditul su. De
exemplu, pentru n = 2 5, se va tipri 5 2, iar pentru n = 1 9 se va tipri 9 1 .
2.16. Se citesc dou numere reale pozitive reprezentnd lungimile catetelor unui
triunghi dreptunghic. S se determine lungimea ipotenuzei i aria triunghiului.
2.17. Se citesc trei cifre a , b , c . S se formeze cu a , b i c un numr de trei cifre,
maxim posibil. De exemplu, pentru a = 3 , b = l , c = 8, numrul maxim este 8 3 1 .
2.18. Se citesc dou numere naturale a i b, primul cuprins ntre 0 i 1 1 , iar al doilea
cuprins ntre 0 i 5 9. Primul numr reprezint ora, al doilea este minutul. S se
determine dup cte minute cele dou valori vor fi egale. De exemplu, a = 5 , b = 4 0
(adic este ora 5 : 4 0 ) . Dup 2 6 de minute ora va fi 6 : 0 6 , adic cele dou valori sunt
egale.
2.19. Se citete un numr natural x cuprins ntre 3 2 i 2 5 5 . S se afieze caracterul care
are codul ASCII egal cu x .
Instruciuni repetitive
2.20. Se citete un numr natural n. S se determine numrul cifrelor lui n.
Rezolvare:
Se analizeaz separat cazul n care n = 0 , numrul de cifre fiind n acest caz 1.
cin >> n ;
k = 0;
if (n == 0) k++;
while (n > 0)
{
k++ ;
n /= 10;

cout<<"numrul de c i f r e e s t e

"<<k;

2.21. Se citete un numr natural nenuln i o cifr k. S se determine de cte ori apare
cifra k n n.
21

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului


Rezolvare:
i n t n, k, c n t ;
c i n >> n >> k ;
c n t = 0;
w h i l e (n > 0)

{
if

(n % 10 == k)
cnt++;
n /= 10;

cout<<k<<" a p a r e de "<<cnt<<"

ori";

2.22. Se citete un numr natural nenul n. S se determine cel mai mare numr natural p
cu proprietatea c 2 p < = n . De exemplu, pentru n = 3 0, p va fi 4.
Rezolvare:
c i n >> n ;
k = 1; P = 0;
w h i l e (k <= n)
{
P++;
k *= 2 ;

c o u t << p - 1 ;
2.23. Se citete un numr natural nenul n. S se determine numrul cifrelor de 0 cu care
se termin n. De exemplu, n = 2 0 3 0 0 are dou cifre de 0 cu care se termin.
Rezolvare:
i n t n, n r Z ;
c i n >> n ;
nrZ = 0;
w h i l e (n % 10 == 0)

{
}

nrZ++;
n /= 10;

c o u t << n r Z ;
2.24. Se citete un numr natural n. S se verifice dac n este sau nu alternant, n sensul
c orice cifr par este ntre dou impare i orice cifr impar se afl ntre dou pare. De
exemplu, 5 2 7 6 9 1 i 2 3 2 3 4 5 6 7 sunt alternante, dar 2 3 4 6 7 nu este.
Rezolvare:
i n t n, a l t e r n a n t ,
c i n >> n ;
c = n % 10;
n /= 10;
a l t e r n a n t = 1;
w h i l e (n > 9)
{

c;

22

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului


if
{

(n % 2 == c % 2)
a l t e r n a n t = 0;
n = 0;

}
}

c = n % 10;
n /= 10;

if ( a l t e r n a n t ) c o u t < < " E s t e a l t e r n a n t " ;


else cout <<"Nu e s t e a l t e r n a n t " ;
2.25. S se afieze toate literele mici ale alfabetului mpreun cu codurile ASCII.
Rezolvare:
char c;
for (c = ' a ' ; c <= ' z ' ; c++)
cout << c <<""<< ( i n t ) c < < " \ n " ;
2.26. Se citete un numr natural n . S se determine numrul zerourilor cu care se
termin produsul n ! = 1 2 3 . . . n. De exemplu, dac n = 6 , 6 ! = 7 2 0, deci 6 ! se
termin cu un singur 0.
Rezolvare:
O prim soluie ar fi calculul lui n ! i apoi determinarea numrului de zerouri
terminale (ca n problema 2.23). Aceast soluie nu funcioneaz n multe cazuri
deoarece se tie c n ! crete foarte repede, deci va depi valoarea maxim care poate fi
memorat ntr-o variabil i n t sau l o n g l o n g . O soluie mai bun este bazat pe
faptul c zeourile se formeaz din produsul 2 - 5 . Deci se poate determina de cte ori
apare factorul 2 i de cte ori apare factorul 5 n n ! . De fapt se poate contoriza numai
de cte ori apare factorul 5, deoarece factorul 2 apare n mod sigur mai des dect 5.
int
cin
cnt
for

n, p, x, c n t ;
>> n;
= 0;
(p = 5; p <= n ; p += 5)
x = p;
while (x % 5 == 0)
{
X /= 5;

cnt++;
cout << c n t ;
Se poate optimiza soluia anterioar observnd c sunt numere care se mpart o
singur dat la 5 (precum 5 , 1 0 , 1 5 , 2 0 , 3 0 ) , altele se mpart de dou ori la 5
(precum 2 5 , 5 0 , 7 5), altele de trei ori (precum 1 2 5) etc. De aici ideea c sunt n / 5
numere care se mpart cel puin o dat la 5, n / 2 5 numere care se mpart de cel puin

23

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului


dou ori la 5, n / 1 2 5 numere care se mpart de cel puin trei ori la 5 etc. Numrul de
zerouri cutat este dat de formula:
n/5 + n/25 + n/125 + ...
Secvena de program este:
int
cin
cnt
P =
for

n, p, c n t ;
>> n ;
= 0;
1;
(p = 5 ; p <= n ; p *= 5)
c n t += (n / p ) ;
c o u t << c n t ;

2.27. S se determine numrul divizorilor unui numr natural.


Rezolvare:
O prim idee ar fi parcurgerea tuturor numerelor naturale cuprinse ntre 1 i n / 2
i contorizarea acelora care se divid cu n . Exist ns o soluie mai bun. Se observ n
primul rnd faptul c dac d este un divizor al lui n, atunci i n / d este divizor al lui n.
Spunem c d i n / d c sunt divizori pereche. De exemplu, pentru n = 1 2 numerele 2 i 6
sunt divizori pereche. De aici rezult faptul c se vor cuta numai divizorii mai mici sau
egali cu s q r t ( n ) (radical din n), deoarece automat se va numra i divizorul su
pereche. Mai exist observaia c dac n este ptrat perfect atunci s q r t ( n ) este
divizor i exist pericolul s fie numrat de dou ori.
c i n >> n ;
n r D i v = 0;
f o r ( i = 1; i * i < n ; i++)
i f (n % i == 0)
n r D i v += 2 ;
i f ( i * i == n) n r D i v + + ;
c o u t << n r D i v ;

2.28. Se citesc numerele naturale x i n , unde x > = 2, n > = l . S se calculeze x n .


Rezolvare:
i n t n, x, p;
c i n >> x >> n ;
P = 1;
w h i l e (n > 0)
{
P *= X;
n-- ;

}
cout

<< P ;

O soluie mai rapid se bazeaz pe urmtoarele relaii:


- dac n este impar, atunci x n = x n _ 1 x
- dac n este par, atunci x n = x n / 2 x n / 2

24

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului


n acest fel, numrul total de operaii de nmulire va scdea semnificativ. De exemplu,
pentru calculul lui x 1 3 se vor efectua numai 5 nmuliri, iar x 1 0 0 doar 8 nmuliri.
Evident, trebuie inut seama c x n este o valoare care crete foarte repede, ceea
censeamn c pentru valori mari se utilizeaz operaii cu numere mari.
cin >> x >> n ;
P = 1;
while (n > 0)
{
if (n % 2 == 1)
{
P *=
n--;

}
X = X

x;

n /= 2;
}
cout << p ;
2.29. Se consider numerele naturale nenule p , q , n . Fien scnduri numerotate de la 1
la n. Se vopsesc mai nti scndurile din p n p cu galben, apoi se vopsesc din q n q cu
albastru. S se determine cte scnduri sunt vopsite cu galben, cte sunt vopsite cu
albastru i cte sunt vopsite cu verde (adic au fost vopsite i cu galben i cu albastru i
culorile s-au combinat). De exemplu, pentru p = 7 , q = 5 i n = 4 3, sunt vopsite cu galben
5 scnduri (cu numerele 7 , 1 4 , 2 1 ,
2 8 , 4 2 ) , cu albastru 7 (adic 5 ,
10,
1 5 , 2 0 , 2 5 , 3 0 , 4 0), iar cu verde una singur (scndura 3 5).
Rezolvare:
Sunt vopsite x = n / c m m m c ( p , q ) cu verde, n / p - x scnduri cu galben i n / q x scnduri cu albastru.
cin >> p >> q >> n ;
/ / se memoreaza i n x cmmdc(p,
x = p;
y = q;
while (y != 0)
{

q)

d = x % y;
x = y;
y = d;

}
/ / c a l c u l cmmmc:
d = (p / x) * q ;
//numrul de s c n d u r i v o p s i t e cu
x = n / d;
cout < < " \ n g a l b e n e :"<< ( n / p - x ) ;
cout < < " \ n a l b a s t r e :"<< ( n / q - x ) ;
cout < < " \ n v e r z i :"<< x ;

albastru

2.30. Se citete un numr natural n , apoi se citesc exact n - 1 numere naturale distincte
din mulimea { 1 , 2 ,..., n } . S se determine numrul natural care lipsete din mulime.
25

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului


Rezolvare:
Se tie c 1 + 2 + . . . + n = n ( n + 1 ) / 2 . Dup citirea valorii n se calculeaz deci
suma primelor n numere naturale. Apoi din aceast sum se scad cele n - 1 valori citite.
Valoarea rmas este exact numrul natural lips. Exemplu: n = 5 , deci suma
e s t e l + 2 + 3 + 4 + 5 = 15;apoi se citesc valorile 4 , 1 , 5 , 3care se scad din sum: 1 5 4 - 1 - 5 - 3 = 2, adic numrul care lipsete.
c i n >> n ;
s = n*(n+1)/2 ;
f o r ( i = 1; i < n ;
{

i++)

c i n >> x ;

S - = X;

cout<<"numrul

lipsa

este

"<<s;

2.31. Se citete n apoi se citesc exact n - 2 numere naturale distincte cuprinse ntre
n. Care sunt cele dou numere naturale cuprinse ntre 1 i n care lipsesc?
Rezolvare:
Se calculeaz sumele Si = l + 2 + . . . + n i s 2 = l 2 + 2 2 + . . . + n 2 . Apoi cele
numere citite se scad din s i i din s 2 . Dac notm cu x i y cele dou numere
lipsesc, atunci, dup scderile celor n - 2 numere, vom obine:
a+b=Si
a 2 +b 2 =s 2
unde Si i s 2 sunt cunoscute. Obinem un sistem de dou ecuaii cu necunoscutele
b care se rezolv uor.

1 i

n-2
care

a i

2.32. Dat numrul natural n ( 2 < = n < = 2 0 ) , s se calculeze ( n + 4 ) ! / 2 n . Nu se


recomand calculul direct al lui ( n + 4 ) ! deoarece poate depi valoarea maxim
admis de tipul long long.
2.33. Se citete un numr natural n > = 2. S se descompun n n factori primi. Se vor
afia factorii i puterile acestora. Cum putem afla de aici numrul divizorilor lui n ?
Rezolvare:
Dup descompunerea n factori n = f i e l f 2 e 2 . . . f k e k . Atunci numrul
divizorilor lui n este dat de relaia: ( e i + 1) ( e 2 + l ) . . . ( e k + l ) .
2.34. Dat un numr natural p > l , s se determine cel mai mic numr natural nenul q cu
proprietatea c p q este ptrat perfect. De exemplu, dac p = 1 2 , atunci q = 3 .
Rezolvare:
Iniial q = l . Se descompune p n factori primi. Orice factor f d i n descompunere
careapare la putere impar este nmulit la q. De exemplu, dac p = 2 3 - 3 4 - 7 1 , atunci
q = 2 7.
c i n >> p ;

26

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului


q = 1;
n = p;
f a c t o r = 1;
while (n > 1)
{
factor++;
expo = 0 ;
w h i l e (n % f a c t o r == 0)
{
n / = factor;
expo++;

}
if

( e x p o % 2 == 1)
q = q * factor;

cout < < q ;

2.35. Se consider dou numere naturale nenule a i b . S se determine numitorul i


numrtorul fraciei ireductibile a / b . De exemplu, pentru a = 1 2 ,
b=15,
12/15=4/5.
Rezolvare:
Se memoreaz n variabila c cel mai mare di vizor comun al numerelor a i b.
Fracia ireductibil are numrtorul a / c , iar numitorul b / c .
2.36. Date numerele naturale nenule a i b , cu a < b , s se determine numrul numerelor
naturale din intervalul [ a , b ] care au cifra unitilor 0. De exemplu, dac a = 7 2 ,
b=115, rezultatul va fi 4(aceste numere sunt 8 0 , 9 0 , 1 0 0 , 1 1 0 ) .
2.37. Fie n natural nenul. Cte cifre au n total numerele de la 1 la n ?
2.38. Se citete n,apoi se citesc numele naturale nenule a x ,
zerouri se termin produsul a x a 2 . . . a n ?

a2,

. . . ,

a n . Cu cte

2.39. Se citete un numr natural nenul n. S se verifice dac n este sau nu un


palindrom. Un numr este palindrom dac este egal cu oglinditul su. Exemple de
numere palindrom: 1 3 3 1 , 4 5 8 5 4 .
2.40. Pentru dou numere naturale nenule m i n , s se determine, n caz c exist, cifra
minim comun. De exemplu, pentru m = 1 2 7 3 i n = 5 0 8 2 7 , cifra minim comun este
2.

2.41. Se citete un numr natural nenul n . S se determine cel mai mic numr natural p ,
strict mai mare dect n , care este prim. Exemplu: n = 2 0, atunci p = 2 3.
2.42. (Conjectura Goldbach) Se citete un numr natural par n strict mai mare dect 2.
S se determine dou numere prime care au suma egal cu n .
27

2. Elemente de baz ale limbajului C/C++. Instruciunile limbajului


2.43. Se citete un numr natural n > l . S se calculeze suma s = l ! + 2 ! +3 ! + . . . n !
2.44. Se consider irul dat prin r e l a i i l e : a i = l , a n = ( a n - i + x / a n - i ) / 2 , pentru orice
n > = 2.Acest ir aproximeaz valoarea lui radical din x . Date n i x , s se determine al
n-lea termen al acestui ir.
2.45. Se citesc numerele naturale n i k. S se scrie n, n caz c este posibil, ca sum de
n numere naturale nenule distincte. Dac nu este posibil, se va afia un mesaj. De
exemplu, pentru n = 1 2 i k = 4 , 1 2 = 1 + 2 + 3 + 6.
2.46. Se citesc numerele naturale n i k. S se scrie n , n caz c este posibil, ca sum de
n numere naturale nenule distincte, din care cel mai mic numr s fie maxim posibil. De
exemplu, pentru n = 2 0 i k = 4 , 1 2 = 3 + 4 + 5 + 8.
2.47. Se citete un numr natural n mai mic sau egal dect I O 9 . S se verifice dac n
este sau nu un cub perfect. De exemplu, 6 4 este cub perfect pentru c se poate scrie ca
43.
2.48. Se citete un numr natural n. S se determine numerele cuprinse ntre 1 i n care
sunt att ptrate perfecte ct i cuburi perfecte.
2.49. Se consider n becuri numerotate de la 1 la n . Iniial toate becurile sunt stinse.
Urmeaz n pai. La fiecare pas i , pornind de la primul bec la ultimul, fiecare al i-lea
bec i schimb starea (adic din deschis devine nchis, iar din nchis devine deschis).
Deci la primul pas toate becurile se aprind, la al doilea pas, fiecare becurile 2 , 4,
6 , . . . i schimb starea, la al treilea pas becurile 3 , 6 , 9 , 1 2 , . . . i schimb
starea etc. S se afieze becurile care au rmas aprinse dup cei n pai.

28

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