0% au considerat acest document util (0 voturi)
164 vizualizări235 pagini

Culegere Python 2025

Încărcat de

geta71
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
164 vizualizări235 pagini

Culegere Python 2025

Încărcat de

geta71
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Mihaela BALCĂ, Georgeta CRĂCIUNESCU, Andrei FLOREA

Oana-Maria LUPAȘCU, Carmen MINCĂ (coord.)


Cristiana POPESCU, Octavian-Lucian POPA, Silviu SĂCUIU

CULEGERE DE PROBLEME
Rezolvate în limbajele Python3 / C++
PENTRU LICEU

ISBN: 978-630-6559-22-0
2025 - Editura L&S Soft | Infobits Academy
[Link]

1
Copyright 2025  Editura L&S Soft Management Impex S.R.L.
Toate drepturile asupra acestei lucrǎri aparţin editurii L&S SOFT.

Reproducerea integralǎ sau parţialǎ a textului din aceastǎ carte este posibilǎ doar cu
acordul în scris al editurii L&S SOFT.

ISBN: 978-630-6559-22-0

MATERIALUL ESTE DISTRIBUIT GRATUIT.


SPOR LA STUDIU!

Infobits Academy
Editura L&S SOFT

Pentru comenzi, folosiți următoarele


date de contact:

Telefon: 0727.731.947
E-mail: hello@[Link]

[Link]
[Link]

Compania noastră oferă de peste 30 de ani manuale şcolare aprobate de Ministerul


Educației şi auxiliare ce respectă programa şcolară, aplicații online, precum şi cursuri de
Informatică şi T.I.C., utile oricărei persoane care doreşte să se pregătească în aceste domenii.

Autorii și colaboratorii noștri sunt oameni dedicați procesului educațional, cu o experiență


pedagogică vastă și autori de manuale școlare și auxiliare avizate de Ministerul Educației.

2
Cuprins

I. Operatori, expresii și tipuri de date .......................................................... 4

II. Structura liniară......................................................................................... 12

III. Structura alternativă ................................................................................. 27

IV. Structuri repetitive .................................................................................... 56

IV.1. Instrucțiunea repetitivă while.............................................. 56

IV.2. Instrucțiunea repetitivă for ................................................. 79

V. Șiruri de caractere ................................................................................... 110

VI. Liste ......................................................................................................... 141

VII. Fișiere text ............................................................................................... 189

VIII. Răspunsuri ............................................................................................... 233

IX. Bibliografie ............................................................................................... 234

3
I. Operatori, expresii și tipuri de date

1. Pentru fiecare dintre itemii următori alegeți litera corespunzătoare răspunsului


corect.
1) Indicați ce se va afișa pe ecran în urma executării comenzii Python : print("10+23")

a) 33 b) 10+23=33 c) 10+23 d) EROARE

2) Indicați ce se va afișa pe ecran în urma executării comenzii Python: print(1001//37)

a)27 b) 27.05405 c) 0.2705e1 d) 27.05

3) Ce se va afișa pe ecran în urma executării secvenței Z = "LIMBAJUL" "PYTHON"


de comenzi Python alăturate? print(Z)

a. LIMBAJUL c. LIMBAJUL PYTHON


b. PYTHON d. LIMBAJULPYTHON

4) Ce se va afișa pe ecran în urma executării secvenței de x='AbC'


comenzi Python alăturate? print(x+' DeEF')

a. AbC b. DeEF c. AbCDeEF d. AbC DeEF

5) Ce se va afișa pe ecran în urma # comentariu: atribuire


executării secvenței de comenzi var = 2026 # continut variabila
Python alăturate? # cerinta
s="# Ce valoare avem?"
print(s)
a. # comentariu: atribuire c. #Cevaloareavem?

b. 2026 d. # Ce valoare avem?

6) Indicați ce se va afișa pe ecran în urma executării instrucțiunii Python următoare:


print(13.999, int(13.999))
a. 13.99 13 b. 13.999 13 c. 13.999 13.999 d. 13.999 14

7) Ce se va afișa pe ecran în urma executării secvenței de comenzi Zi = 'Luni'


Python alăturate? Zi = 20.07
Zi = 2026
print(Zi)
a. Luni b. 20.07 c. 2026 d. 20.07 2026

8) Indicați ce se va afișa pe ecran în urma executării comenzii Python : print(23%7)


a. 2 b. 3 c. 3.2857 d. 23%7
9) Ce se va afișa pe ecran în urma executării x, y, z = 15, 2.34, "Test!"
secvenței de comenzi Python alăturate? print(x,y,z)
a. 15 15 15 b. 15 2 34 c. 15 2.34 "Test!" d. 15 2.34 Test!

4
10) Știind că variabila x=True și variabila y=False, indicați care dintre expresiile Python
următoare are valoarea False.

a. x and y b. x or y c. not not x d. x and y or x

11) Se consideră secvența de comenzi Python sir = "Programare"


alăturată. x=10
Ce se va afișa pe ecran în urma executării y=20
comenzilor, în ordinea din secvență?
list = [10, 20, 30, 40, 50]
print('A' not in sir)
print('g' in sir)
print('r' in sir)
print("gram" in sir)
print(x in list)
print(y not in list)

a. True b. True c. True d. True


True False True False
True True True False
True True False True
True True True True
False False False False

12) Secvența de comenzi Python alăturată este utilizată pentru x = (True == 1)


inițalizarea variabilelor x,y,z și w. y = (False == 0)
Ce valori au aceste variabile după executarea secvenței? z = 2 + True
w = False - 10

a. x= True b. x= True c. x= True d. x= 1


y= True y= True y= True y= 1
z= 3 z= 3 z= True z= 3
w= False w= -10 w= False w= -10

13) Fie expresia logică: (x % y == 0) or not (y % x != 0). Ce valori pot avea


variabilele x și y, astfel încât în urma evaluării expresiei, expresia să aibă valoarea
True?

a. x= 4 b. x= 5 c. x= 14 d. x= 15
y= 9 y= 11 y= 28 y= 14
14) Ce se va afișa pe ecran în urma executării secvenței lista = [1, 2, 3, 4, 5]
de comenzi Python alăturate? x = 3 in lista
y = 20 not in lista
print(x,y)

a. True True b. True False c. False False d. False True

5
15) Ce valori au variabilele E1 și E2 la finalul x,y = 10, 10
executării secvenței de comenzi Python L1 = [1, 2, 3, 4]
alăturate? L2 = [1, 2, 3, 4]
E1 = (id(x) == id(y))
E2 = (id(L1) == id(L2))
a. E1=True b. E1=True c. E1=False d. E1=False
E2=True E2=False E2=False E2=True

2. Se consideră secvența de comenzi Python alăturată. x= input()


y= int(input())
Știind că se citesc valorile 3 și 6 pentru variabilele x și y, z= int(x) + y

în această ordine, asociați fiecărei comenzi Python din prima coloană a tabelului
următor, valoarea/tipul afișat/ă pe ecran, ca urmare a executării, precizat în a doua
coloană.

print(type(x))
36
print(type(y))

print(x+str(y))
<class 'int'>
print(type(z))

print(z)
<class 'str'>
print(type(2026))

print(type(12.05))
<class 'float'>
print(type(-7.1e3))

print(type('x')) 9
3. Evaluați expresiile Python de mai jos precizând rezultatul și tipul expresiilor.

a) 4*x+9//3, unde variabila x are valoarea 2


b) 7*x-5/2, unde variabila x are valoarea 5
c) x>2*3, unde variabila x are valoarea 7
d) (2*x-1)%5, unde variabila x are valoarea 6
e) 3*(x+4)-2, unde variabila x are valoare 2.0
f) True+False+10

4. Asociați fiecărei constante Python din prima linie categoria din care face parte:

”xyz” ’156’ 142e-2 2026 723.45 0xB12 ’x’ 0.182 0o34 2.25e1 ”523.26”

Constante numerice Constante numerice Constante șir de


întregi reale caractere

6
5. Știind că variabilele x, y și z au valorile x=24,y=16,z=4, asociați fiecărei expresii
Python din prima coloană a tabelului următor, valoarea corespunzătoare din a doua
coloană.

a) 24 & 16 1) -17
b) 24 | 16 2) 1
3) 8
c) 24 ^ 16
4) 16
d) ~ 16 5) 24
e) 24 << 4 6) 384
f) 16 >> 4

6. Evaluați expresiile Python de mai jos precizând rezultatul și tipul expresiilor.

a)"abc"+"12" b)12+int("3") c) 3*"abc" d)'b' in "abcd"

7. Pentru fiecare dintre itemii următori alegeți litera corespunzătoare răspunsului


corect.

1) Fie codul Python de mai jos.


a= 17
b= 31.2026
c='Python'
d= 17+3j
print(a," ",b," ",c," ",d)
Indicați care este tipul variabilei d:

a) complex b) întreg c) real d) șir de


caractere

2) Indicați ce se va afișa pe ecran în urma executării secvenței de comenzi Python de mai


jos:
a= 10+31j
b= 17+3j
print(a+b)

a)27+34i b)27+34j c)a+b d)Eroare

3) Indicați rezultatul cărei sume este afișat pe ecran în n=int(input("n= "))


urma executării secvenței de comenzi Python print(n*(n+1))
alăturate.

a. 1+3+5+...+(2*n-1) c. 1+2+3+...+n

b. 2+6+10+...+(4*n-2) d. 2+4+6+...+2*n

7
4) Ce se va afișa pe ecran în urma sir = [1, 3, 17, 31, 2000, 2026]
executării secvenței de comenzi a=(sir[3]-(sir[0]+sir[1]+sir[2]))*200
Python alăturate?
print(a in sir)
print(sir)

a. True c. True
[1, 3, 17, 31, 2000, 2026] [1, 3, 17, 31, 2000, 2006]
b. False d. False
[1, 3, 17, 31, 2000, 2026] Eroare

5) Indicați rezultatul cărei sume este afișat pe ecran în n=int(input("n= "))


urma executării secvenței de comenzi Python alăturate. print(n*(n+1)//2)

a.1+3+5+...+(2*n-1) c.1+2+3+...+n

b.2+6+10+...+(4*n-2) d.2+4+6+...+2*n

6) Indicați ce se va afișa pe ecran în urma sir1 = [3, 17, 2000]


executării secvenței de comenzi Python sir2 = [7, 19, 2026]
alăturate:
print(sir1+sir2)

a.[3, 17, 2000, 7, 19, 2026] c.[3, 17, 2000]

b.[3, 7, 17, 19, 2000, 2026] d.[7, 19, 2026]

7) Indicați rezultatul cărei sume este afișat pe ecran în n=int(input("n= "))


urma executării secvenței de comenzi Python alăturate. print(n*n)

a.1+3+5+...+(2*n-1) c.1+2+3+...+n

b.2+6+10+...+(4*n-2) d.2+4+6+...+2*n

8) Indicați ce se va afișa pe ecran în urma executării secvenței de comenzi Python:


a=1234
print(a//1000+10*((a//100)%10)+100*((a//10)%10)+1000*(a%10))

a.3412 b.3421 c. 3.4231 d.4321

9) Indicați ce se va afișa pe ecran în urma executării secvenței de comenzi Python:


a=1234
print(a//1000%2+((a//100)%10)%2+((a//10)%10)%2+(a%10)%2)

a.1 b.2 c.3 d.4


10) Știind că variabila a=31, b=10 și variabila c=2002, indicați care dintre expresiile
Python următoare are valoarea True.
a. a<b or b>c c. a+b==c or b>c

b. a==c or b%2==1 d. not(a+b==c)

8
11) Se consideră secvența de text1 = "Eu iubesc"
comenzi Python alăturată. Ce se text2 = " sa invatat"
va afișa pe ecran în urma a=31
executării comenzilor, în ordinea
din secvență? b=17
sir = [1, 3, 17, 31, 2000, 2002, 2026]
print('E' in text1)
print("inv" in text2)
print(text1+text2)
print(a//b not in sir)

a. True c. True
False True
Eu iubesc sa invatat Eu iubesc sa invatat
True True

b. True d. True
False True
Eu iubesc sa invatat Eu iubesc sa invatat
False False

12) Ce valori au aceste variabile după executarea secvenței de comenzi Python de mai jos?

a=[1,2,3,4,5,6,7]

print(a[4]," ",a[6]-a[1])

a. 5 5 b. 5 6 c. 4 5 d. 4 6

8. Pentru fiecare dintre itemii următori alegeți litera corespunzătoare răspunsului


corect.

1) Indicați ce se va afișa pe ecran în urma executării secvenței de comenzi Python de mai


jos:
x = 3
y = 2
z = x ** y
print(z % 4)

a) 1 b) 3 c) 0 d) 2

2) Indicați ce se va afișa pe ecran în urma executării secvenței de comenzi Python de mai


jos:
a = 10
b = 3
print(a % b * b)
a)1 b)10 c)0 d)3

9
x = True
3) Ce se va afișa pe ecran în urma executării
secvenței de comenzi Python alăturate? y = False
print(not x or y and x)

[Link] [Link]

b.0 [Link]

4) Ce se va afișa pe ecran în urma a = 3


executării secvenței de comenzi b = 5
Python alăturate? a += b % 2
b //= a
print(a, b, bool(b))
a.4 1 True c.3 1 True

b.4 0 False d.5 0 False

5) Indicați rezultatul cărei sume este afișat pe ecran a = 10


în urma executării secvenței de comenzi Python b = 3
alăturate.
print(a // b, a % b, a / b)

a. 3 1 3.3333333333333335 c. 3 1 3.3333333

b. 3 1 3.0 d. 3.0 1.0 3.3333333

6) Indicați ce se va afișa pe ecran în urma executării secvenței de comenzi Python:


a = 275
b = 46
print((a // 10 % 10) + (b % 10) * (a % 10))
a. 42 b.57 c. 3.61 d.37

7) Indicați ce se va afișa pe ecran în urma executării secvenței de comenzi Python:


s1 = "Py"
s2 = "thon"
s3 = s1 + s2
print("tho" in s3 and s3 * 2)

a. thon b. PythonPython [Link] [Link]

8) Știind că variabila a=12, b=4 și variabila c=3, indicați care dintre expresiile Python
următoare are valoarea True.

a. a % b == c b. a // b == c c. a * c == b d. a + b + c == 20

10
9) Se consideră secvența de comenzi Python text = "Python e cool"
alăturată.
print("e" in text)
Ce se va afișa pe ecran în urma executării
comenzilor, în ordinea din secvență? print("cool" in text)
print(text[7:9])

a. b. c. d.
False False True True
False True False True
e e e e

10) Ce valori se afisează după executarea secvenței de comenzi Python de mai jos?
a = [10, 20, 30, 40, 50]
x = a[2] + a[0]
y = a[4] - a[3]
print(x, y)

a.40 10 b. 30 20 c.40 20 d.50 10

11
II. Structura liniară

1. Scrieți un program Python/C++ care să citească de la tastatură, de pe linii separate,


două numere întregi a și b, apoi să se calculeze și să afișeze, pe ecran, suma
numerelor citite. De exemplu, pentru a=25 și b=13, va afișa: 38

Limbajul Python Limbajul C/C++

#include <iostream>
a = int(input("a="))
using namespace std;
b = int(input("b="))
int main()
print("suma=",a+b) { int a,b;
cout<<”a=”; cin>>a;
cout<<”b=”; cin>>b;
cout<<”a+b=”<<a+b;
return 0;}

2. Scrieți un program Python/C++ care să citească de la tastatură, de pe aceeași linie,


separate printr-un spațiu, două numere naturale a și b, apoi să calculeze și să
afișeze, pe ecran, diferenţa, produsul şi câtul lor, în această ordine. De exemplu,
pentru a=25 și b=13, se va afișa: 12 325 1
Limbajul Python Limbajul C/C++
# valorile se citesc de pe #include <iostream>
# aceeași linie using namespace std;
int main()
a, b = map(int, input().split())
{ int a,b;
print(a-b, a*b, a//b)
cin>>a>>b;
cout<<a-b<<" "<<a*b;
cout<<" "<<a/b;
return 0;
}

3. Scrieți un program Python/C++ care citește de la tastatură, de pe aceeași linie,


separate printr-un spațiu, două numere naturale a și b, apoi determină și afișează, pe
ecran, ultima cifră a sumei celor două numere naturale. De exemplu, pentru a=25 și
b=18, se va afișa: 3.
Limbajul Python Limbajul C/C++

a,b=input().split() #include <iostream>


using namespace std;
a=int(a)
int main()
b=int(b) { int a,b;
cin>>a>>b;
c=(a+b)%10
cout<<(a+b)%10;
print(c) return 0;
}

12
4. Într-o clasă sunt F fete și B băieți. Fiecare fată rezolvă câte X probleme de fizică pe zi,
iar fiecare băiat rezolva Y probleme pe zi. Câte probleme rezolva elevii din clasă în Z
zile? Scrieți un program Python/C++ care să rezolve această problemă.
De exemplu, pentru F=7, B=5, X=3, Y=2, X=5 se va afișa 155.

Limbajul Python Limbajul C/C++


#include <iostream>
F,B,X,Y,Z=map(int, input().split()) using namespace std;
int main()
print((X*F+Y*B)*Z)
{ int F,B,X,Y,Z;
cin>>F>>B>>X>>Y>>Z;
cout<<(X*F+Y*B)*Z;
return 0;
}

5. La un club de pictură participă n copii. Ei trebuie să picteze, câte doi, un tablou. Sțiind
că fiecare copil va picta câte un tablou cu fiecare copil din club, câte tablouri vor fi
pictate în total? Scrieți un program Python/C++ care să citească de la tastatură
numărul natural n și care să afișeze numărul total de tablouri care vor fi pictate de
copii. De exemplu, pentru n=4, se va afișa valoarea 6.

Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>


using namespace std;
print(n*(n-1)//2)
int main()
{ int n;
cin>>n;
cout<<n*(n-1)/2;
return 0;
}
6. Scrieți un program Python/C++ care citește de la tastatură, de pe aceeași linie,
separate printr-un spațiu, două numere naturale a și b, apoi formează un nou număr
prin alipirea cifrei unităților lui a cu cifra unităților lui b. Programul afișează pe ecran
numărul format. De exemplu, pentru a=123 și b=45, programul va afișa valoarea 35.
Limbajul Python Limbajul C/C++

a,b=input().split() #include <iostream>


using namespace std;
a=int(a)
int main()
b=int(b)
{ int a,b,c;
c=(a%10)*10+b%10 cin>>a>>b;
print(c) c=(a%10)*10+b%10;
cout<<c;
return 0;
}

7. Scrieți un program Python/C++ care citește de la tastatură, de pe aceeași linie,


separate printr-un spațiu, două numere naturale a și b (a>10). Programul
construiește un nou număr prin alipirea ultimelor două cifre ale lui a la finalul b, apoi
afișează pe ecran numărul format. De exemplu, pentru a=123 și b=45, programul va
afișa valoarea 4523.

13
Limbajul Python Limbajul C/C++

a,b=input().split() #include <iostream>


using namespace std;
a=int(a)
int main()
b=int(b)
{ int a,b,c;
c=a%100 cin>>a>>b;
b=b*100+c c=a%100; b=b*100+c;
print(b) cout<<b;
return 0;
}

8. Fie n un număr natural, format din exact 4 cifre, toate nenule. Scrieți un program
Python/C++ care citește numărul n și formează un nou număr prin alipirea ultimelor
două cifre ale lui n cu primele două cifre ale sale. Programul afișează pe ecran
numărul format. De exemplu, pentru n=1234, programul va afișa valoarea 3412.
Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>


x=n%100 using namespace std;
y=n//100 int main()
n=x*100 + y { int n,x,y;
print(n) cin>>n;
x=n%100; y=n/100;
n=x*100+y; cout<<n;
return 0;
}

9. Scrieți un program Python/C++ care citește de la tastatură o cifră c și un număr


natural n, format din exact 4 cifre, toate nenule, apoi modifică numărul n înlocuindu-i
cifra unităților cu cifra c. Programul afișează pe ecran numărul modificat. De exemplu,
pentru c=8 și n=1234, programul va afișa valoarea 1238.

Limbajul Python Limbajul C/C+

#include <iostream>
c, n = map(int, input().split())
using namespace std;
n=n//10*10+c
int main()
print(n) { int n,c;
cin>>c>>n; n=n/10*10+c;
cout<<n;
return 0;
}

10. Fie n un număr natural n, format din exact 4 cifre, toate nenule. Scrieți un program
Python/C++ care citește numărul n și îl modifică mutând cifra miilor la finalul
numărului citit. Programul afișează pe ecran numărul modificat. De exemplu, pentru
n=1234, programul va afișa valoarea 2341.

14
Limbajul Python Limbajul C/C++
#include <iostream>
n =int(input())
using namespace std;
x=n%1000
int main()
y=n//1000; { int n,x,y;
n=x*10+y; cin>>n;
print(n) x=n%1000; y=n/1000;
n=x*10+y;
cout<<n;
return 0;
}

11. Scrieți un program Python/C++ care să citească de la tastatură, de pe linii separate,


două numere întregi a și b, apoi să se calculeze și să afișeze, pe ecran, câtul și restul
numerelor citite. De exemplu, pentru a=31 și b=17, va afișa: 1 14

Limbajul Python Limbajul C/C++


#include <iostream>
a = int(input("a=")) using namespace std;
b = int(input("b=")) int main()
{ int a,b;
print("catul=",a//b)
cout<<”a=”; cin>>a;
print("restul=",a%b)
cout<<”b=”; cin>>b;
cout<<”a div b=”<<a/b;
cout<<”a mod b=”<<a%b;
return 0;
}

12. Scrieți un program Python/C++ care să citească de la tastatură, un număr natural a


cu exact trei cifre, apoi să calculeze și să afișeze, pe ecran, numărul cifrelor
pare și numărul cifrelor impare, în această ordine. De exemplu, pentru a=123, se va
afișa: 1 2
Limbajul Python Limbajul C/C++

a=int(input("a= ")) #include <iostream>


nri=a//100%2+a//10%10%2+a%10%2 using namespace std;
nrp=3-nri int main()
print(nrp," ",nri)) { int a,nrp,nri;
cout<<"a= ";
cin>>a;
nri=a/100%2+a/10%10%2ș
nri=nri+a%10%2
nrp=3-nri;
cout<<nrp<<" "<<nri;
return 0;
}

15
13. Scrieți un program Python/C++ care citește de la tastatură, de pe aceeași linie,
separate printr-un spațiu, două numere naturale cu exact două cifre a și b, apoi
determină și afișează, pe ecran, numărul format din ultima cifră a lui a și prima cifră a
lui b. De exemplu, pentru a=25 și b=81, se va afișa: 58.
Limbajul Python Limbajul C/C++
#include <iostream>
a = int(input("a= "))
using namespace std;
b = int(input("b= ")) int main()
print((a%10)*10+b//10) { int a,b;
cout<<"a= "; cin>>a;
cout<<"b= "; cin>>b;
cout<<(a%10)*10+b/10;
return 0;
}

14. Scrieți un program care citește de la tastatură, de pe aceeași linie, separate printr-un
spațiu, două numere naturale cu exact două cifre a și b, apoi determină și afișează, pe
ecran, numărul format prin alipirea la numărul a, numărul b, spațiu și invers.
De exemplu, pentru a=25 și b=81, se va afișa: 2581 8125,

Limbajul Python Limbajul C/C++

a = int(input("a= ")) #include <iostream>


b = int(input("b= ")) using namespace std;
int main()
print(a*100+b," ",b*100+a)
{int a,b;
cout<<"a= ";
cin>>a;
cout<<"b= ";
cin>>b;
cout<<a*100+b<<" ";<<b*100+a;
return 0;
}

15. La un club de fotbal participă a băieți talentați. Ei nu încep atrenamentul până nu își
dau mâna între ei o singură dată. Scrieți un program care afișează câte strângeri de
mână au loc. De exemplu, pentru a=10, se va afișa valoarea 45.

Limbajul Python Limbajul C/C++

#include <iostream>
a = int(input("a= "))
using namespace std;
print(a*(a-1)//2) int main()
{ int a;
cin>>a;
cout<<a*(a-1)/2;
return 0;
}

16
16. Un vas plin cu apă cântărește X grame. După ce se introduce în vas o bilă de P grame,
vasul cântărește Y grame.
Scrieți un program Python/C++ care să citească valorile reale X, P, Y și care să
determine densitatea materialului din care este confecționată bila.
De exemplu, pentru X=50, P=12 și Y=60.5 programul va afișa 8 (g/cm2)

Limbajul Python Limbajul C/C++

X,P,Y=map(float, input().split()) #include <iostream>


densitate=P/(X+P-Y) using namespace std;
print(densitate) int main()
{ float X,P,Y,densitate;
cin>>X>>P>>Y;
densitate=P/(X+P-Y);
cout<<densitate;
return 0;
}

17. Scrieți un program Python care citește de la tastatură un număr real L (n<104)
reprezentând lungimea laturii unui triunghi echilateral și afișează, pe rânduri diferite, cu
două zecimale exacte, perimetrul triunghiului, aria triunghiului, raza cercului înscris în
triunghi, raza cercului circumscris triunghiului și lungimea înălțimii, ca în exemplu.
Exemplu: pentru L=3 atunci se afișează:
P=9.00
A=3.90
r=0.87
R=1.73
h=2.60
Limbajul Python Limbajul C/C++
import math #include <iostream>
L = float(input()) #include <cmath>
P = 3 * L #include <iomanip>
h = (L * [Link](3)) / 2 using namespace std;
A = (L ** 2 * [Link](3)) / 4 int main()
r = h / 3 { double L;
R = L / [Link](3) cin>>L;
print(f"P={P:.2f}") double P=3*L;
print(f"A={A:.2f}") double h=(L*sqrt(3))/2;
print(f"r={r:.2f}") double A=(L*L*sqrt(3))/4;
print(f"R={R:.2f}") double r=h/3;
print(f"h={h:.2f}") double R=L/sqrt(3);
cout<<fixed<<setprecision(2);
cout<<"P="<<P<<'\n';
cout<<"A="<<A<<'\n';
cout<<"r="<<r<<'\n';
cout<<"R="<<R<<'\n';
cout<<"h="<<h<<'\n';
return 0;
}
18. Scrieți un program în Python/C++, care citește de la tastatură, de pe aceeași linie,
separate printr-un spațiu, două numere naturale nenule x și y (x<10 și y<10), apoi
afișează, pe ecran, separate printr-un spațiu, xy și yx, în această ordine. De exemplu,
pentru x=5 și y=2, se va afișa: 25 32

17
Limbajul Python Limbajul C/C++

x, y = map(int, input().split()) #include <iostream>


print(x**y, y**x) #include <cmath>
using namespace std;
int main()
{ unsigned int x,y;
cin>>x>>y;
cout<<pow(x,y)<<" "<<pow(y,x);
return 0;
}

19. Scrieți un program în Python/C++, care citește de la tastatură un număr natural nenul
n, cu cel mult patru cifre, apoi calculează și afișează, pe ecran, în câte cifre de zero se
termină produsul n! (unde n!=1*2*...*n).
De exemplu, pentru n=32, se va afișa: 7

Limbajul Python Limbajul C/C++

n=int(input("n= ")) #include <iostream>


nrzero=n//5+n//25+n//125+n//625+n//3125 using namespace std;
print(nrzero) int main()
{
int n,nrzero;
cout<<"n= ";
cin>>n;
nrzero=n/5+n/25+n/125;
nrzero+=(n/625+n/3125);
cout<<nrzero;
return 0;
}

20. Scrieți un program în Python/C++, care citește de la tastatură un număr natural nenul
n, cu cel mult trei cifre, apoi calculează și afișează, pe ecran, valoarea expresiei
1*2+2*3+3*4+...+n*(n+1). De exemplu, pentru n=3, se va afișa: 20

Limbajul Python Limbajul C/C++

n=int(input("n= ")) #include <iostream>


E=n*(n+1)*(n+2)//3 using namespace std;
print(E) int main()
{ unsigned int n,E;
cout<<"n= "; cin>>n;
E= n*(n+1)*(n+2)/3;
cout<<E;
return 0;
}

21. Scrieți un program în Python/C++, care citește de la tastatură, de pe aceeași linie,


separate printr-un spațiu, trei numere naturale distincte, a, b și c, reprezentând cifre
prime, apoi determină și afișează, pe ecran, cifra primă lipsă. De exemplu, pentru a=5
b=7 și c=2, se va afișa: 3

18
Limbajul Python Limbajul C/C++
a, b, c = map(int, input().split()) #include <iostream>
d=a^b^c^2^3^5^7 using namespace std;
print(d) int main()
{ unsigned int a, b, c, d;
cin>>a>>b>>c;
d=a^b^c^2^3^5^7;
cout<<d;
return 0;
}

22. Inițial, un antreprenor deține n acțiuni la o companie din domeniul IT. În m zile
consecutive, antreprenorul își dublează numărul acțiunilor față de cât deținea în ziua
anterioară, astfel: după prima zi are 2*n acțiuni, după a doua zi are 4*n acțiuni etc.
Scrieți un program în Python/C++, care citește de la tastatură un număr natural nenul
n, cu cel mult două cifre, reprezentând numărul inițial de acțiuni, apoi citește de la
tastatură un număr natural nenul m, m<11. Programul afișează, pe ecran, câte acțiuni
deține antreprenorul la finalul zilei a m-a.
De exemplu, pentru n=90, m=5 se va afișa valoarea 2880
Limbajul Python Limbajul C/C++
#include <iostream>
n = int(input("n= "))
using namespace std;
m = int(input("m= ")) int main()
print(n << m) { int n,m;
cout<<"n= "; cin>>n;
cout<<"m= "; cin>>m;
cout<<(n << m);
return 0;}

23. Scrieți un program Python/C++ care citește de la tastatură un număr n, de două cifre,
și construiește un nou număr rez prin alipirea la sfîrșitul lui n a sumei cifrelor lui.
Programul va afișa pe ecran numărul construit. De exemplu, pentru n=47 programul
va afișa rez = 4711, deoarece suma cifrelor este 4 + 7 = 11.
Limbajul Python Limbajul C/C++
n = int(input()) #include <iostream>
zeci = n // 10 using namespace std;
unitati = n % 10 int main()
suma = zeci + unitati { int n,zeci,unitati,suma,rez;
rez = int(str(n) + str(suma))
cin >> n;
print("rez =", rez)
zeci=n/10; unitati=n%10;
suma = zeci + unitati;
n= n*((suma>9) ? 100: 10);
rez = n + suma;
cout << "rez = " << rez;
return 0;
}

19
24. Scrieți un program Python/C++ care citește de la tastatură un număr natural n, de trei
cifre, toate cifrele fiind diferite de 0, apoi construiește în m oglinditul acestuia și îl
afișează pe ecran. De exemplu, pentru n = 372, se va afișa: m = 273.

Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>


using namespace std;
sute=n//100
int main()
zeci=(n//10)%10 { int n, m;
unitati=n%10 cin >> n;
# construim oglinditul int sute=n/100, zeci=(n/10)%10;
m=unitati*100+zeci*10+sute int unitati=n%10;
print("m =", m) // construim oglinditul
m=unitati*100+zeci*10+sute;
cout << "m = " << m;
return 0;
}
25. Scrieți un program Python/C++ care citește de la tastatură un număr natural n,
format din două cifre. Programul va forma un nou număr rez, obținut prin dublarea
fiecărei cifre a numărului n, în ordinea în care apar, și va afișa acest nou număr pe
ecran. De exemplu, dacă se citește n = 75, atunci cifrele 7 și 5 devin 77 și 55, iar
rezultatul afișat va fi 7755.
Limbajul Python Limbajul C/C++
n = int(input()) #include <iostream>
using namespace std;
zec = n // 10 int main() {
unit = n % 10 int n;
cin >> n;
int zec = n / 10;
rez = int(str(zec) * 2 + int unit = n % 10;
str(unit) * 2) int rez = zec * 1000;
print("rez =", rez) rez=rez+zec*100+unit*10+unit;
cout << "rez = " << rez;
return 0;
}
26. Scrieți un program Python/C++ care citește de la tastatură un număr natural n,
format din exact șase cifre. Programul va separa numărul în două grupuri de câte trei
cifre (primele trei și ultimele trei), va calcula suma cifrelor pentru fiecare grup și va
afișa diferența absolută dintre cele două sume.
Exemplu: Dacă se citește n = 321457, atunci vom avea grupurile : 321 și 457
→ |6 - 16| = 10
Limbajul Python
n = input()
# Grupa 1: primele 3 cifre
g1 = int(n[0]) + int(n[1]) + int(n[2])
# Grupa 2: ultimele 3 cifre
g2 = int(n[3]) + int(n[4]) + int(n[5])
# Diferența absolută
diferenta = abs(g1 - g2)
print("Diferența este:", diferenta)

20
Limbajul C++
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
int c6 = n % 10; n /= 10;
int c5 = n % 10; n /= 10;
int c4 = n % 10; n /= 10;
int c3 = n % 10; n /= 10;
int c2 = n % 10; n /= 10;
int c1 = n % 10;
int suma1 = c1 + c2 + c3;
int suma2 = c4 + c5 + c6;
int diferenta = abs(suma1 - suma2);
cout << "Diferenta este: " << diferenta;
return 0;
}

27. Scrieți un program Python/C++ care citește de la tastatură un număr natural n,


format din exact patru cifre. Programul va:
 înmulți fiecare cifră a numărului cu poziția ei în număr (de la stânga la
dreapta),
 concatenând valorile obținute pentru a forma un nou număr rez,
 și va afișa acest rezultat.
 Exemplu: Dacă n = 1234, atunci, rezultatul este 14916
Limbajul Python Limbajul C/C++
n = input() #include <iostream>
rez = "" using namespace std;
rez += str(int(n[0]) * 1) int main() {
int n;
rez += str(int(n[1]) * 2)
cin >> n;
rez += str(int(n[2]) * 3) // extragem fiecare cifră
rez += str(int(n[3]) * 4) int c4 = n % 10; n /= 10;
int c3 = n % 10; n /= 10;
int c2 = n % 10; n /= 10;
print("rez =", rez)
int c1 = n;
int p1 = c1 * 1;
int p2 = c2 * 2;
int p3 = c3 * 3;
int p4 = c4 * 4;
// concatenăm valorile
cout << "rez = " << p1 << p2;
cout << p3 << p4;
return 0;
}

28. Scrieți un program Python/C++ care citește de la tastatură un număr natural n,


format din exact cinci cifre. Programul va:
 extrage a doua și a patra cifră a numărului,
 calcula modulul diferenței dintre cele două cifre,
 plasa cifra rezultată între prima și ultima cifră ale numărului, în această ordine,
 și afișa rezultatul sub forma unui nou număr de 3 cifre.

21
Exemplu: Dacă n = 45618, atunci noul număr va fi 448

Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


# Extragem fiecare cifră #include <cmath>
c5 = n % 10 using namespace std;
c4 = (n // 10) % 10 int main() {
c3 = (n // 100) % 10
int n;
c2 = (n // 1000) % 10
c1 = n // 10000 cin >> n;
diff = abs(c2 - c4) // Extragem fiecare cifră
rez = c1 * 100 + diff * 10 + c5 int c5 = n % 10;
print("rez =", rez)
int c4 = (n / 10) % 10;
int c3 = (n / 100) % 10;
int c2 = (n / 1000) % 10;
int c1 = n / 10000;
int diff = abs(c2 - c4);
int rez = c1*100+diff* 10 +c5;
cout << "rez = " << rez;
return 0;
}

29. Scrieți un program Python/C++ care citește de la tastatură un număr natural d,


format din exact patru cifre, reprezentând o distanță galactică. Programul va calcula
suma celor patru cifre ale numărului, va înmulți această sumă cu prima cifră a
numărului și va afișa rezultatul, reprezentând estimarea consumului de combustibil.
Exemplu: Dacă d = 2431, atunci consumul estimat va fi 20.
Limbajul Python Limbajul C/C++
d = int(input()) #include <iostream>
using namespace std;
# Extragem cifrele int main() {
int d;
c4 = d % 10
cin >> d;
c3 = (d // 10) % 10 // Extragem cifrele
int c4 = d % 10;
c2 = (d // 100) % 10
int c3 = (d / 10) % 10;
c1 = d // 1000 int c2 = (d / 100) % 10;
int c1 = d / 1000;
# Calculăm suma și consumul
// Calculăm suma și consumul
suma = c1 + c2 + c3 + c4 int suma = c1 + c2 + c3 + c4;
consum = suma * c1 int consum = suma * c1;
cout<<"Estimarea consumului”;
print("Estimarea consumului este:", cout<<” este: " << consum;
consum)
return 0;
}

30. Scrieți un program în Python/C++, care citește de la tastatură, de pe aceeași linie,


separate printr-un spațiu, două numere naturale nenule a și b (a<10 și b<10), apoi
afișează, pe ecran, separate printr-un spațiu, ab și ba, în această ordine.
De exemplu, pentru a=7 și b=3, se va afișa: 73 37

22
Limbajul Python Limbajul C/C++

a, b = map(int, input().split()) #include <iostream>


ab = a * 10 + b using namespace std;
ba = b * 10 + a int main()
print(f"{ab} {ba}") {
unsigned int a,b;
cin>>a>>b;
cout<<a*10+b<<" "<<b*10+a;
return 0;
}

31. Scrieți un program în Python/C++, care citește de la tastatură două numere. Afișați
suma dintre cifra unităților primului număr și cifra zecilor celui de al doilea.
De exemplu, pentru a = 123 și b = 456 se va afisa: 3+5=8

Limbajul Python

a= int(input("Primul numar: "))


b= int(input("Al doilea numar: "))
# Extragem cifra unităților din primul număr
cifra_unitati = a % 10
# Extragem cifra zecilor din al doilea număr
cifra_zeci = (b // 10) % 10

# Calculăm și afișăm suma


suma = cifra_unitati + cifra_zeci
print("Suma cifrei unitatilor primului numar si a cifrei zecilor celui
de-al doilea este:", suma)

Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int a, b;
cout << "Primul numar: ";
cin >> a;
cout << "Al doilea numar: ";
cin >> b;
int cif_unitati = a % 10;
int cif_zeci = (b / 10)% 10;
int suma=cif_unitati+cif_zeci;
cout <<"Suma cifre iunitatilor primului numar si a cifrei zecilor
celui de-al doilea este: " << suma << endl;
return 0;
}

32. Scrieți un program în Python/C++, care citește de la tastatură un număr natural nenul
n, cu exact patru cifre și afișează numărul după ce s-a interschimbat prima cu cifră cu
ultima lui cifră.
De exemplu, pentru n=1234, se va afișa: 4231

23
Limbajul Python

n = int(input("Introdu un numar de exact 4 cifre: "))


# Extragem cifrele
prima = n // 1000
mij1 = (n // 100) % 10
mij2 = (n // 10) % 10
ultima = n % 10
# Construim noul număr cu prima și ultima cifră inversate
noul_numar = ultima * 1000 + mij1 * 100 + mij2 * 10 + prima
print("Numărul după interschimbare este:", noul_numar)

Limbajul C/C++
#include <iostream>
using namespace std;

int main() {
int n;
cout << "Introdu un numar de exact 4 cifre: ";
cin >> n;
int prima = n / 1000;
int mij1 = (n / 100) % 10;
int mij2 = (n / 10) % 10;
int ultima = n % 10;
int noul_numar = ultima * 1000 + mij1*100 + mij2*10 + prima;
cout<<"[Link] interschimbare este: "<< noul_numar << endl;
return 0;
}

33. Într-un ținut misterios, două ceasuri fermecate pornesc la drum din același loc, dar cu
ritmuri diferite. Fiecare ceas îți transmite, la finalul cursei, cât timp a mers, exprimat în
ore, clipe și bătăi. În acest ținut o oră are 60 de clipe iar o clipă are 70 de bătăi.
Ceasurile îți spun valorile lor pe aceeași linie, în următoarea ordine: ore1, clipe1,
batai1 pentru primul ceas și pentru cel de-al doilea ceas ore2, clipe2, batai2. Scrieți un
program în Python/C++, care calculează timpul total cumulat.
De exemplu, pentru 2 45 60 și 1 20 50,
programul va afișa 4 6 40 ( bătăi: 60 + 50 = 110 → 1 clipă și 40 bătăi.
clipe: 45 + 20 + 1 = 66 → 1 oră și 6 clipe
ore: 2 + 1 + 1 = 4)

Limbajul Python

o1, c1, b1, o2, c2, b2 = map(int, input().split())


# Adunăm bătăile
b_total = b1 + b2
c_total = c1 + c2 + b_total // 70
o_total = o1 + o2 + c_total // 60
# Normalizăm

24
b_total %= 70
c_total %= 60
# Afișăm timpul total
print(f"{o_total} {c_total} {b_total}")

Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int o1, c1, b1, o2, c2, b2,o_tot,b_tot,c_tot;
cin >> o1 >> c1 >> b1 >>o2 >> c2 >> b2;
b_tot = b1 + b2;
c_tot = c1 + c2+b_tot/70; o_tot = o1 + o2 + c_tot/60;
b_tot %= 70; c_tot %= 60;
cout << o_tot << " " << c_tot<< " " << b_tot<< endl;
return 0;
}

34. Scrieți un program în Python/C++, care citește de la tastatură un număr natural n,


format din exact două cifre [Link] cifră a numărului este transformată astfel:
dacă cifra este pară, se adună la cifra respectivă câtul împărțirii la 3, iar daca este
impară se aduna dublul ultimei cifre a pătratului său, iar dacă rezultatul depășește 9,
se ia doar ultima cifră a sa. Programul afișează pe ecran noul număr format din cele
două cifre transformate, în aceeași ordine.
De exemplu, pentru n=37, programul va afișa 15(a = 3 (impar) → 3 + 2 * (9
% 10) = 21 → 1;b = 7 (impar) → 7 + 2 * (49 % 10) = 25 → 5) iar
pentru n=24, programul va afisa 45 (a = 2 (par) → 2 + 2 / 3 = 4; b= 4
(par) → 4 + 1 = 5)

Limbajul Python

n = int(input())
a = n // 10 # cifra zecilor
b = n % 10 # cifra unitatilor
# transformare pentru cifra a
a_t=(a + a // 3)*(a % 2 == 0)+(a + 2*((a * a)%10))*(a % 2 != 0)
# transformare pentru cifra b
b_t= (b + b // 3)*(b % 2 == 0)+(b + 2*((b * b)%10))*(b % 2 != 0)
# daca e mai mare de 9, luam doar ultima cifra
a_t %= 10
b_t%= 10
# afisam noul numar
print(f"{a_t}{b_t}")

Limbajul C/C++

#include <iostream>
using namespace std;
int main()
{ int n, a_t,b_t,a,b;
cin >> n;

25
a = n / 10; b = n % 10;
a_t=(a%2== 0)*(a + a / 3)+(a % 2 != 0)*(a + 2*((a * a)% 10));
b_t=(b % 2 == 0)*(b + b / 3)+(b % 2 != 0)*(b+2*((b * b)% 10));
a_t %= 10; b_t %= 10;
cout << a_t << b_t << endl;
return 0;
}

35. Scrieți un program care să citească de la tastatură un număr natural a, apoi să se


afișeze, pe ecran, ultima cifră a numărului 2a.
De exemplu, pentru a=31 se va afișa: 8.

Limbajul Python Limbajul C/C++


a = int(input("a= ")) #include <iostream>
if a==0:
using namespace std;
print(1)
else: int main()
if a%4==0: { int a;
print(6) cout<<"a="; cin>>a;
if a%4==1: if(a==0)
print(2)
if a%4==2: cout<<1;
print(4) else
if a%4==3: {
print(8) if(a%4==0)cout<<6;
if(a%4==1)cout<<2;
if(a%4==2)cout<<4;
if(a%4==3)cout<<8;
}
return 0;
}

26
III. Structura alternativă

1. Scrieți un program Python/C++ care citește de la tastatură, de pe linii separate, două


numere întregi a și b, și apoi afișează cel mai mare număr dintre cele citite.
De exemplu, pentru a=123 și b=45, programul afișează valoarea 123.
Limbajul Python Limbajul C/C++
a = int(input()) #include <iostream>
using namespace std;
b = int(input())
int main()
if a>b : { int a,b;
cin>>a>>b;
print(a)
if(a>b) cout<<a;
else: else cout<<b;
return 0;
print(b)
}

2. Scrieți un program Python/C++ citește de la tastatură un număr real x și apoi afișează


mesajul ”POZITIV” dacă valoarea lui x este pozitivă, “NEGATIV” dacă este negativă,
sau ”NUL” dacă este 0.
De exemplu, pentru x=-17.23, programul afișează mesajul NEGATIV.
Limbajul Python Limbajul C/C++
x = float(input()) #include <iostream>
if x>0 : using namespace std;
print("POZITIV") int main()
else: { float x;
if x<0: cin>>x;
print("NEGATIV") if(x>0) cout<<"POZITIV";
else: else if(x<0)cout<<"NEGATIV";
print("NUL") else cout<<"NUL";
return 0;
}

3. Scrieți un program Python/C++ care citește de la tastatură, de pe aceeași linie, trei


numere reale distincte, apoi calculează și afișează pe ecran suma dintre cel mai mare
și cel mai mic dintre cele trei citite. De exemplu, dacă se citesc valorile 3.16, -1, 8.3,
programul afișează suma: 7.3 (=-1+8.3).
Limbajul Python Limbajul C/C++
x,y,z = map(float, #include <iostream>
input().split()) using namespace std;
maxi=x int main()
if maxi<y : maxi=y { float x,y,z,mini,maxi;
if maxi<z : maxi=z cin>>x>>y>>z;
mini=x maxi=x;
if mini>y : mini=y if(maxi<y) maxi=y;
if mini>z : mini=z else if(maxi<z)maxi=z;
print(mini+maxi) mini=x;
if(mini>y) mini=y;
else if(mini>z)mini=z;
cout<<mini+maxi;
return 0;
}

27
4. Scrieți un program Python/C++ care citește de la tastatură, de pe aceeași linie,
separate prin câte un spațiu, două numere întregi și un caracter din mulțimea
{’+’,’-’,’*’,’/’} . În funcție de valoarea caracterului, programul va efectua
operația aritmetică indicată între cele două numere întregi și va afișa pe ecran
valoarea calculată.
De exemplu, dacă se citesc valorile 4 5 *, programul va efectua operația de înmulțire
a celor două numere și va afișa valoarea 20 (=4*5)
Limbajul Python Limbajul C/C++
#include <iostream>
x,y,op = input().split()
using namespace std;
x = int(x)
int main()
y = int(y)
{ int x,y;
if op == '+' :
char op;
print(x+y) cin>>x>>y>>op;
elif op == '-' : if (op=='+') cout<<x+y;
print(x-y) else if (op=='-') cout<<x-y;
elif op == '*' : else if (op=='*') cout<<x*y;
print(x*y) else if (op=='/')
elif op == '/' : cout<<(float)x/y;
return 0;
print(x/y)
}

5. Scrieți un program Python/C++ care citește de la tastatură un număr natural n format


din exact 3 cifre. Programul afișează pe ecran mesajul ORDONAT dacă cifrele lui n
sunt în ordine crescătoare, adică cifra sutelor este mai mică decât cifra zecilor, iar cifra
zecilor este mai mică decât cifra unităților. Altfel, programul va afișa mesajul NU.
De exemplu, pentru n=726, programul va afișa NU, iar pentru n=123, programul va
afișa ORDONAT.
Limbajul Python Limbajul C/C++
#include <iostream>
n = int(input())
using namespace std;
u=n%10
int main()
n=n//10
z=n%10 { int n,s,z,u;
s=n//10 cin>>n;
if s<=z and z<=u : u=n%10; n=n/10;
print("ORDONAT") z=n%10; s=n/10;
else: print("NU") if (s<=z && z<=u)cout<<"ORDONAT";
else cout<<"NU";
return 0;}

6. Un elev are S lei pentru a cumpăra, de la librărie, trei caiete și trei coperți. El vrea să-i
rămână cât mai mulți bani de buzunar după ce își cumpără aceste rechizitele. La
librărie se vând două tipuri de caiete (de c1 lei și c2 lei), trei tipuri de coperți (de p1 lei,
p2 lei și p3 lei) și două tipuri de seturi formate dintr-un caiet și o copertă (de s1 lei și
s2 lei).
Scrieți un program Python/C++ care să citească numerele naturale S, c1, c2, p1, p2,
p3, s1 și s2, și apoi să determine ce trebuie să cumpere elevul pentru a cheltui cât
mai puțini bani. Programul va afișa o valoare reprezentând bani rămași.
De exemplu, dacă se citesc numerele: 110 27 17 19 23 16 41 37 , elevul va
alege 3 caiete a câte 17 lei și 3 coperti a câte 16 lei. Programul va afișa 11,
reprezentând banii rămași (110-3*17-3*16=11).

28
Limbajul Python Limbajul C/C++

S,c1,c2,p1,p2,p3,s1,s2 = #include <iostream>


using namespace std;
map(int,input().split()) int main()
if c1<c2 : minc=c1 { int S,c1,c2,p1,p2,p3;
else: minc=c2 int s1, s2, rest;
if p1<p2 : minp=p1 int minc, minp, mins;
else: minp=p2 cin>>S>>c1>>c2;
if minp>p3 : minp=p3 cin>>p1>>p2>>p3>>s1>>s2;
if s1<s2 : mins=s1 if(c1<c2)minc=c1;
else: mins=s2 else minc=c2;
if minc+minp<mins : if(p1<p2)minp=p1;
rest=S-3*(minc+minp)
else minp=p2;
else: rest=S-3*mins;
if(minp>p3) minp=p3;
print(rest)
if(s1<s2)mins=s1;
else mins=s2;
if(minc+minp<mins)
rest=S-3*(minc+minp);
else rest=S-3*mins;
cout<<rest;
return 0;
}

7. Scrieți un program Python/C++ care citește un număr natural nenul S (S≤100000) și


care determină și afișează patru numere naturale x, y, z și w astfel încât
x+y+z+w=S și produsul x*y*z*w este maximul dintre produsele oricăror patru numere
naturale a căror suma este S.
De exemplu, pentru n=18, programul va afișa 4 4 5 5.

Limbajul Python Limbajul C/C++


S=int(input()) #include <iostream>
x=y=z=w=S//4 using namespace std;
r=S%4 int main()
{ int S,x,y,z,w,r,a;
if r==1 : cin>>S;
w=w+1 x=y=z=w=S/4; r=S%4;
else : if(r==1)w++;
if r==2 :
w=w+1 else if(r==2)
z=z+1 {w++; z++;}
else : else if(r==3)
if r==3 :
w=w+1 {w++; z++; y++;}
z=z+1 cout<<x<<" "<<y<<" ";
y=y+1
print(x,y,z,w) cout<<z<<" "<<w;
return 0; }

8. Scrieți un program Python/C++ care citește de la tastatură un număr natural n și


verifică daca este un pătrat perfect. Programul afișează pe ecran mesajul DA dacă n
este pătrat perfect, respectiv NU în caz contrar. De exemplu, pentru n=141, programul
va afișa NU, iar pentru n=121, programul va afișa DA.

29
Limbajul Python Limbajul C/C++
import math #include <iostream>
n = int(input()) #include <cmath>
radn = int([Link](n)) using namespace std;
if radn*radn==n : print("DA") int main()
else : print("NU") { int n,radn;
cin>>n;
radn=sqrt(n);
if(n==radn*radn)
cout<<"DA";
else cout<<"NU";
return 0;
}

9. Un melc trebuie să parcurgă o distanță de D metri. El se deplasează cu o viteză de v


Km/h. În câte minute va parcurge melcul distanța D?
Scrieți un program Python/C++ care să citească două numere reale D și V, de pe
aceeași linie, și apoi să determine numărul de minute necesare melcului pentru a
parcurge distanța D.
De exemplu, pentru v=0.3 km/h, d=20 programul afișează 4 (=4 minute)

Limbajul Python Limbajul C/C++


V,D=map(float, input().split()) #include <iostream>
D=D/1000 using namespace std;
M=int(60*D/V) int main() {
if M!=60*D/V : M=M+1 float V,D;
print(M) int M;
cin>>V>>D;
D=D/1000; M=60*D/V;
if(M!=60*D/V) M++;
cout<<M;
return 0;
}

10. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
și verifică dacă n se poate scrie ca o sumă de trei numere naturale consecutive. În
acest caz, programul afișează pe ecran cele trei numere naturale consecutive,
separate prin câte un spațiu. În caz contrar va afișa mesajul NU.
De exemplu, pentru n=24 se afișează: 7 8 9, iar pentru n=11 se afișează NU.

Limbajul Python Limbajul C/C++


n=int(input()) #include <iostream>
if n%3==0 : using namespace std;
x=n//3 int main() {
print(x-1, x, x+1) int n,x; //n=x-1+x+x+1=3*x
else: print("NU") cin>>n;
if(n%3==0) { x=n/3;
cout<<x-1<<" "<<x<<" "<<x+1;}
else cout<<"NU";
return 0;
}

30
11. Scrieți un program Python/C++ care citește de la tastatură un număr natural n
(9<n<109) și care afișează cel mai mare număr care se formează cu cifra unităților și
cifra zecilor din n. Programul nu va utiliza funcții predefinite (de exemplu max).
Exemplu: pentru n=574017 se afișează 71

Limbajul Python Limbajul C/C++


n = int(input()) #include <iostream>
u = n % 10 using namespace std;
z = (n // 10) % 10 int main()
n1 = z * 10 + u {
n2 = u * 10 + z unsigned n;
if n1 > n2: cin>>n;
print(n1) int u=n%10;
else: int z=(n/10)%10;
print(n2) int n1=z*10+u;
int n2=u*10+z;
if (n1>n2)
cout<<n1;
else
cout<<n2;
return 0;
}
12. Scrieți un program Python/C++ care citește de la tastatură un număr natural n
(99<n<1000) și care afișează cifrele numărului n în ordine crescătoare, separate
printr-un spațiu. Programul nu va utiliza funcții predefinite (de exemplu max).
Exemplu: pentru n=207 se afișează 0 2 7

Limbajul Python Limbajul C/C++


n = int(input()) #include <iostream>
a = n // 100 using namespace std;
b = (n // 10) % 10
c = n % 10 int main()
if a <= b and a <= c: {
if b <= c: int n;
print(a, b, c) cin>>n;
else: int a=n/100;
print(a, c, b) int b=(n/10)%10;
elif b <= a and b <= c: int c=n%10;
if a <= c: int aux;
print(b, a, c) if(a>b)
else: {
print(b, c, a) aux=a; a=b; b=aux;
else: }
if a <= b: if(a>c)
print(c, a, b) {
else: aux=a; a=c; c=aux;
print(c, b, a) }
if(b>c)
{
aux=b; b=c; c=aux;
}
cout<<a<<" "<<b<<" "<<c;
return 0;
}

31
13. Scrieți un program Python/C++ care citeşte un număr natural nenul, n. Dacă acesta
este par se vor citi de pe același rând două numere reale şi se va afișa maximul dintre
ele iar dacă este impar se vor citi trei numere întregi de pe rânduri diferite şi se va
afișa cifra maximă a lor. Toate numerele citite aparțin intervalului [100,999].
Programul nu va utiliza funcții predefinite (de exemplu max).
Exemplu: pentru n=103 se citesc 345 612 803 și se afișează 8 iar pentru n=586 se
citesc 314.5 640.12 și se afișează 640.12

Limbajul Python
n = int(input())
if n % 2 == 0:
# citire numere de pe același rând
x, y = map(float, input().split())
if x > y:
print(x)
else:
print(y)
else:
# citire numere de pe rânduri diferite
a = int(input())
b = int(input())
c = int(input())
a1, a2, a3 = a // 100, (a // 10) % 10, a % 10
b1, b2, b3 = b // 100, (b // 10) % 10, b % 10
c1, c2, c3 = c // 100, (c // 10) % 10, c % 10
max_cifra = a1
if a2 > max_cifra: max_cifra = a2
if a3 > max_cifra: max_cifra = a3
if b1 > max_cifra: max_cifra = b1
if b2 > max_cifra: max_cifra = b2
if b3 > max_cifra: max_cifra = b3
if c1 > max_cifra:
max_cifra = c1
if c2 > max_cifra:
max_cifra = c2
if c3 > max_cifra:
max_cifra = c3
print(max_cifra)

Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
if(n%2==0)
{
double x,y;
cin>>x>>y;
cout<<(x>y?x:y); }
else
{

32
int a,b,c;
cin>>a>>b>>c;
int a1=a/100;
int a2=a/10%10;
int a3=a%10;
int b1=b/100;
int b2=b/10%10;
int b3=b%10;
int c1=c/100;
int c2=c/10%10;
int c3=c%10;
int maxCif=a1;
if(a2>maxCif) maxCif=a2;
if(a3>maxCif) maxCif=a3;
if(b1>maxCif) maxCif=b1;
if(b2>maxCif) maxCif=b2;
if(b3>maxCif) maxCif=b3;
if(c1>maxCif) maxCif=c1;
if(c2>maxCif) maxCif=c2;
if(c3>maxCif) maxCif=c3;
cout<<maxCif;
}
return 0;
}

14. Scrieți un program Python/C++ care citește de la tastatură un număr natural n1


(9<n<100) și, de pe același rând un număr natural n2 (99<n<1000). Programul
afișează cel mai mic număr cu 2 cifre care se obține folosind o cifră din primul număr
și o cifră din al doilea număr.
Exemplu: pentru n1=62 și n2=801 atunci se afișează 12.

Limbajul Python
n1, n2 = map(int, input().split())
c1 = n1 // 10
c2 = n1 % 10
d1 = n2 // 100
d2 = (n2 // 10) % 10
d3 = n2 % 10
minim = 99
def verifica(num):
global minim
if num >= 10 and num < minim:
minim = num
verifica(c1 * 10 + d1)
verifica(d1 * 10 + c1)
verifica(c1 * 10 + d2)
verifica(d2 * 10 + c1)
verifica(c1 * 10 + d3)
verifica(d3 * 10 + c1)
verifica(c2 * 10 + d1)
verifica(d1 * 10 + c2)
verifica(c2 * 10 + d2)
verifica(d2 * 10 + c2)
verifica(c2 * 10 + d3)
verifica(d3 * 10 + c2)
print(minim)

33
Limbajul C/C++
#include <iostream>
using namespace std;
bool esteValid(int num)
{ return num >= 10; }

int main()
{
int n1,n2;
cin>>n1>>n2;
int c1=n1/10;
int c2=n1%10;
int d1=n2/100;
int d2=n2/10%10;
int d3=n2%10;
int minim=99;
int num;
num=c1*10+d1;
if(esteValid(num)&&num<minim) minim=num;
num=d1*10+c1;
if(esteValid(num)&&num<minim) minim=num;
num=c1*10+d2;
if(esteValid(num)&&num<minim) minim=num;
num=d2*10+c1;
if(esteValid(num)&&num<minim) minim=num;
num=c1*10+d3;
if(esteValid(num)&&num<minim) minim=num;
num=d3*10+c1;
if(esteValid(num)&&num<minim) minim =num;
num=c2*10+d1;
if (esteValid(num)&&num<minim) minim=num;
num=d1*10+c2;
if(esteValid(num)&&num<minim) minim=num;
num=c2*10+d2;
if(esteValid(num)&&num<minim) minim=num;
num=d2*10+c2;
if(esteValid(num)&&num<minim) minim=num;
num=c2*10+d3;
if(esteValid(num)&&num<minim) minim=num;
num=d3*10+c2;
if (esteValid(num)&&num<minim) minim=num;
cout<<minim;
return 0;
}

15. Scrieți un program Python/C++ care citește de la tastatură, de pe același rând, trei
numere reale a, b și c (0<a,b,c<103). Programul afișează mesajul triunghi dacă
cele trei numere scrise alăturat formează laturile unui triunghi, situație în care se
afișează tipul de triunghi (mesaj de forma: echilateral, isoscel, oarecare) sau
mesajul nu în caz contrar.
Exemplu: pentru a=5, b=6 și c=5 atunci se afișează: isoscel

34
Limbajul Python

a, b, c = map(float, input().split())
if a + b > c and a + c > b and b + c > a:
print("triunghi")
if a == b == c:
print("echilateral")
elif a == b or b == c or a == c:
print("isoscel")
else:
print("oarecare")
else:
print("nu")

Limbajul C/C++

#include <iostream>
using namespace std;
int main()
{
double a,b,c;
cin>>a>>b>>c;
if(a+b>c&&a+c>b&&b+c>a)
{ cout<<"triunghi"<<'\n';
if(a==b&&b==c)
cout<<"echilateral";
else if(a==b||b==c||a==c)
cout<<"isoscel";
else cout<<"oarecare";
}
else cout<<"nu";
return 0;
}

16. Scrieți un program Python/C++ care citește de la tastatură, de pe același rând, trei
numere naturale nenule zi, luna și an reprezentând o dată calendaristică. Programul
afișează numărul de zile rămase până la sfârșitul lunii.
Exemplu: dacă se citește 17 8 2025 atunci se afișează 14.
Limbajul Python

def este_bisect(an):
return (an % 4 == 0 and an % 100 != 0) or (an % 400 == 0)
zi, luna, an = map(int, input().split())
if luna == 2:
zile_luna = 29 if este_bisect(an) else 28
elif luna == 4 or luna == 6 or luna == 9 or luna == 11:
zile_luna = 30
else: zile_luna = 31
zile_ramase = zile_luna - zi
print(zile_ramase)

35
Limbajul C/C++

#include <iostream>
using namespace std;
bool esteBisect(int an)
{
return (an%4==0&&an%100!=0)||(an%400==0);
}
int main()
{
int zi,luna,an;
cin>>zi>>luna>>an;
int zileLuna;
if(luna==2)
zileLuna=esteBisect(an)?29:28;
else if(luna==4||luna==6||luna==9||luna==11)
zileLuna=30;
else
zileLuna=31;
int zileRamase=zileLuna-zi;
cout<<zileRamase;
return 0;
}
17. Scrieți un program Python/C++ care citește de la tastatură, de pe același rând, trei
numere naturale nenule zi, luna și an reprezentând o dată calendaristică. Programul
afișează numărul de zile de la începutul anului până la ziua curentă inclusiv.
Exemplu: dacă se citește 19 3 2024 atunci se afișează 79.
Limbajul Python
def este_bisect(an):
return (an % 4 == 0 and an % 100 != 0) or (an % 400 == 0)
zi, luna, an = map(int, input().split())
zile_totale = zi
if luna > 1: zile_totale += 31
if luna > 2:
if este_bisect(an): zile_totale += 29
else: zile_totale += 28
if luna > 3: zile_totale += 31
if luna > 4: zile_totale += 30
if luna > 5: zile_totale += 31
if luna > 6: zile_totale += 30
if luna > 7: zile_totale += 31
if luna > 8: zile_totale += 31
if luna > 9: zile_totale += 30
if luna > 10: zile_totale += 31
if luna > 11: zile_totale += 30
print(zile_totale)

Limbajul C/C++
#include <iostream>
using namespace std;
bool esteBisect(int an)
{ return (an%4==0 && an%100!=0) || (an%400==0);}

36
int main()
{
int zi,luna,an;
cin>>zi>>luna>>an;
int zileTotale=zi;
if(luna>1) zileTotale+=31;
if(luna>2) zileTotale+=esteBisect(an)?29:28;
if(luna>3) zileTotale+=31;
if(luna>4) zileTotale+=30;
if(luna>5) zileTotale+=31;
if(luna>6) zileTotale+=30;
if(luna>7) zileTotale+=31;
if(luna>8) zileTotale+=31;
if(luna>9) zileTotale+=30;
if(luna>10) zileTotale+=31;
if(luna>11) zileTotale+=30;
cout<<zileTotale;
return 0;
}

18. Scrieți un program Python/C++ care citește de la tastatură, de pe același rând, trei
numere naturale nenule zi, luna și an reprezentând o dată calendaristică. Programul
afișează numărul de zile rămase până la sfârșitul anului.
Exemplu: dacă se citește 17 11 2024 atunci se afișează 44.
Limbajul Python
def este_bisect(an):
return (an % 4 == 0 and an % 100 != 0) or (an % 400 == 0)
zi, luna, an = map(int, input().split())
zile_in_an = 366 if este_bisect(an) else 365
zile_trecute = zi
if luna > 1: zile_trecute += 31
if luna > 2: zile_trecute += 29 if este_bisect(an) else 28
if luna > 3: zile_trecute += 31
if luna > 4: zile_trecute += 30
if luna > 5: zile_trecute += 31
if luna > 6: zile_trecute += 30
if luna > 7: zile_trecute += 31
if luna > 8: zile_trecute += 31
if luna > 9: zile_trecute += 30
if luna > 10: zile_trecute += 31
if luna > 11: zile_trecute += 30
zile_ramase = zile_in_an - zile_trecute
print(zile_ramase)

Limbajul C/C++
#include <iostream>
using namespace std;
bool esteBisect(int an)
{ return (an%4==0 && an%100!=0) || (an%400==0); }
int main()
{
int zi,luna,an;
cin>>zi>>luna>>an;

37
int zileInAn=esteBisect(an)?366:365;
int zileTrecute=zi;
if(luna>1) zileTrecute+=31;
if(luna>2) zileTrecute+=esteBisect(an)?29:28;
if(luna>3) zileTrecute+=31;
if(luna>4) zileTrecute+=30;
if(luna>5) zileTrecute+=31;
if(luna>6) zileTrecute+=30;
if(luna>7) zileTrecute+=31;
if(luna>8) zileTrecute+=31;
if(luna>9) zileTrecute+=30;
if(luna>10) zileTrecute+=31;
if(luna>11) zileTrecute+=30;
int zileRamase=zileInAn-zileTrecute;
cout<<zileRamase;
return 0;
}
19. Scrieți un program Python/C++ care citește un
număr real x și afișează rezultatul expresiei
alăturat.
Obs. Trebuie avut în vedere condițiile de
existență al radicalului!
Numărul de zecimale este cel implicit al
limbajului.
Exemplu:
dacă x=10 se afișează: E(10)=-0.375000
Limbajul Python

import math
x = float(input())
if x <= 2: e = x**2 + 3*x - 2
elif 2 < x < 5: e = [Link](x) - x / 2
elif 5 <= x < 100: e = (x + 1) / (2 - x) + 1
else:
putere = 2 ** x
dif = x - putere
if dif < 0:
print("Eroare")
exit()
e = 2 * x + [Link](dif)
print("E(",x,")=",f"{e:.6f}")

Limbajul C/C++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ double x,E;
cin>>x;
if(x<=2) E=x*x+3*x-2;
else if(x>2&&x<5) E=sqrt(x)-x/2;
else if(x>=5&&x<100) E=(x+1)/(2-x)+1;
else

38
{ double putere=pow(2,x);
double dif=x-putere;
if(dif<0) { cout<<"Eroare"; return 0; }
E=2*x+sqrt(dif);
}
cout<<"E("<<x<<")="<<E;
return 0;
}

20. Scrieți un program Python/C++ care citește de la tastatură, de pe același rând, trei
numere reale a, b și c (a,b,c<104). Programul rezolvă ecuația de gradul al II-lea,
a*x2+b*x+c=0, și afișează, pe rânduri diferite, soluțiile ecuației în ordine crescătoare,
ca în exemplu. Numărul de zecimale este cel implicit al limbajului.
Exemplu: pentru a=1, b=-5 și c=6 atunci se afișează
x1=2
x2=3

Limbajul Python
import math
a, b, c = map(float, input().split())
if a == 0:
if b == 0:
print("Ecuatia nu are solutii reale.")
else:
x = -c / b
print(f"x1={x}")
else:
delta = b**2 - 4*a*c
if delta < 0:
print("Ecuatia nu are solutii reale.")
elif delta == 0:
x = -b / (2*a)
print(f"x={x}")
else:
sqrt_delta = [Link](delta)
x1 = (-b - sqrt_delta) / (2*a)
x2 = (-b + sqrt_delta) / (2*a)
if x1 < x2:
print(f"x1={x1}")
print(f"x2={x2}")
else:
print(f"x1={x2}")
print(f"x2={x1}")

Limbajul C/C++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ double a,b,c;
cin>>a>>b>>c;
if(a==0)
{
if(b==0)
cout<<"Ecuatia nu are solutii reale.";

39
else
{
double x=-c/b;
cout<<"x1="<<x;
}
}
else
{
double delta=b*b-4*a*c;
if(delta<0) cout<<"Ecuatia nu are solutii reale.";
else if(delta==0)
{
double x=-b/(2*a); cout<<"x="<<x;
}
else
{ double sqrt_delta=sqrt(delta);
double x1=(-b-sqrt_delta)/(2*a);
double x2=(-b+sqrt_delta)/(2*a);
if(x1>x2)
swap(x1, x2);
cout<<"x1="<<x1<< '\n';
cout<<"x2="<<x2;
}
}
return 0;
}

21. Scrieți un program Python/C++, care citește de la tastatură, de pe linii separate, două
numere întregi a și b, cu cel mult patru cifre fiecare, a<b, apoi afișează, pe ecran,
natura produsului numerelor întregi din intervalul [a,b], astfel: mesajul STRICT
POZITIV, dacă produsul numerelor este strict pozitiv, mesajul STRICT NEGATIV,
dacă produsul numerelor este strict negativ sau mesajul NUL, dacă produsul numerelor
este nul.
De exemplu, dacă a=-4 și b=8, programul afișează mesajul NUL
a) dacă a=-4 și b=-1, programul afișează mesajul STRICT POZITIV
b) dacă a=-4 și b=-2, programul afișează mesajul STRICT NEGATIV

Limbajul Python Limbajul C/C++


a = int(input()) #include <iostream>
using namespace std;
b = int(input())
int main()
if a<=0 and b>=0 : { int a,b;
cin>>a>>b;
print("NUL")
if(a<=0 and b>=0)
else: cout<<"NUL";
else
if b<0 and (b-a+1)%2!=0:
if (b<0 and (b-a+1)%2!=0)
print("STRICT NEGATIV") cout<<"STRICT NEGATIV";
else cout<<"STRICT POZITIV";
else:
return 0;
print("STRICT POZITIV") }

22. Scrieți un program Python/C++, care citește de la tastatură, de pe linii separate, patru
numere reale a, b, c și d, cu cel mult patru cifre fiecare, a<b și c<d, apoi afișează,

40
pe ecran, mesajul DA, dacă intersecția intervalului deschis la ambele capete (a,b) cu
intervalul deschis la ambele capete (c,d) este mulțimea vidă sau mesajul NU, în
caz contrar.
De exemplu, dacă a=-2.5 b=4.3 c=5 și d=8, programul afișează mesajul DA
iar dacă a=-2.5 b=4.3 c=4 și d=8, programul afișează mesajul NU

Limbajul Python Limbajul C/C++


a = float(input()) #include <iostream>
b = float(input()) using namespace std;
c = float(input()) int main()
d = float(input()) { float a,b,c,d;
if b<=c or d<=a: cin>>a>>b>>c>>d;
print("DA") if(b<=c or d<=a)
else: cout<<"DA";
print("NU") else cout<<"NU";
return 0;
}

23. Scrieți un program Python/C++, care citește de la tastatură, de pe aceeași linie, trei
numere întregi m, n și p, cu cel mult patru cifre fiecare, apoi afișează, pe ecran, cifra
de control a modulului sumei celor trei numere. Cifra de control a unui număr se obține
efectuând suma cifrelor sale, apoi suma cifrelor acestei sume, până când suma
obținută este un număr format dintr-o singură cifră. Această ultimă cifră se numește
cifră de control. De exemplu, dacă se citesc valorile 20 -100 1, programul afișează:
7 deoarece 20+(-100)+1 este -79, modulul numărului -79 este 79, iar cifra de
control a lui 79 este 7.

Limbajul Python Limbajul C/C++


m,n,p = map(int, input().split()) #include <iostream>
s=m+n+p using namespace std;
if s<0: s=-s int main()
if s==0 or s%9!=0: cifc=s%9 { int m,n,p,s,cifc;
else: cifc=9 cin>>m>>n>>p;
print(cifc) s=m+n+p;
if (s<0) s=-s;
if(s==0 or s%9!=0) cifc=s%9;
else cifc=9;
cout<<cifc;
return 0;
}

24. Scrieți un program Python/C++, care citește de la tastatură, de pe aceeași linie,


separate prin câte un spațiu, trei numere naturale nenule a, b, c, unde a<b, b<c,
având cel mult patru cifre fiecare și un caracter op din mulțimea {'a', 'g'}. În funcție
de valoarea caracterului op, programul afișează, pe ecran, mesajul DA dacă cele trei
numere pot forma termenii consecutivi ai unei progresii aritmetice (pentru opțiunea
'a'), respectiv termenii consecutivi ai unei progresii geometrice (pentru opțiunea 'g')
sau mesajul NU, în caz contrar.
De exemplu, dacă se citesc valorile 4 7 10 a, programul va afișa mesajul DA dacă
se citesc valorile 4 7 10 g, programul va afișa mesajul NU, dacă se citesc valorile
2 4 8 g, programul va afișa mesajul DA

41
Limbajul Python Limbajul C/C++
#include <iostream>
a, b, c, op = input().split()
using namespace std;
a = int(a) int main()
b = int(b) { int a,b,c;
char op;
c = int(c) cin>>a>>b>>c>>op;
if (op == 'a' and 2*b==a+c) or (op if ((op == 'a' and 2*b==a+c) or
== 'g' and b*b==a*c): (op == 'g' and b*b==a*c))
print("DA") cout<<"DA";
else cout<<"NU";
else: print("NU") return 0;
}

25. Scrieți un program Python/C++, care citește de la tastatură un număr natural n, având
exact două cifre. Cifrele numărului n se modifică după următoarele reguli: dacă cifra
numărului este cifră primă, cifra scade cu 1, dacă cifra numărului este cifră pătrat
perfect, atunci cifra se înlocuiește cu rădăcina pătrată a cifrei, restul cifrelor nu se
modifică. Programul afișează pe ecran numărul n, după transformarea cifrelor
numărului. Dacă, după aplicarea regulilor enunțate, numărul n este egal cu numărul
citit inițial, programul afișează mesajul nu exista.
De exemplu, pentru n=29, programul va afișa 13, iar pentru n=68 sau pentru n=80,
programul va afișa nu exista.
Limbajul Python Limbajul C/C++
import math #include <iostream>
n = int(input()) #include <cmath>
a=n//10 using namespace std;
b=n%10 int main()
rada = int([Link](a)) { int n,a,b,rada,radb;
radb = int([Link](b)) cin>>n;
if rada*rada==a : a=n/10; b=n%10;
a=rada rada=int(sqrt(a));
if radb*radb==b : radb=int(sqrt(b));
b=radb if(rada*rada==a) a=rada;
if a==2 or a==3 or a==5 or a==7: if(radb*radb==b) b=radb;
a=a-1 if (a==2 or a==3 or a==5
if a*10+b==n: or a==7) a=a-1;
print("nu exista") if (a*10+b==n)
else: cout<<"nu exista";
print(a*10+b) else cout<<a*10+b;
return 0;
}

26. Scrieți un program Python/C++ care citește de la tastatură o valoare întreagă care
reprezintă ora (0–23) și afișează pe ecran mesajul:
- „dimineață” pentru orele 5–11,
- „după-amiază” pentru orele 12–17,
- „seară” pentru orele 18–22,
- „noapte” , în rest.
De exemplu, pentru ora = 6, programul va afișa: dimineață.

42
27. Limbajul Python Limbajul C/C++
ora = int(input()) #include <iostream>
using namespace std;
if 5 <= ora <= 11: int main() {
print("dimineață") int ora;
elif 12 <= ora <= 17: cin >> ora;
print("după-amiază") if (ora >= 5 && ora <= 11)
elif 18 <= ora <= 22: cout << "dimineață";
print("seară") else if (ora>=12 && ora<=17)
else: cout << "după-amiază";
print("noapte") else if (ora>=18 && ora<=22)
cout << "seară";
else cout << "noapte";
return 0;
}
28. Scrieți un program Python/C++ care citește de la tastatură coordonatele a două
puncte diferite din plan, A(x₁, y₁) și B(x₂, y₂), și determină natura dreptei formate
de acestea. Programul va afișa unul dintre următoarele mesaje:
- „dreaptă orizontală”, dacă dreapta este paralelă cu axa Ox,
- „dreaptă verticală”, dacă dreapta este paralelă cu axa Oy,
- „dreaptă oblică”, în orice alt caz.
Exemplu:
- Dacă A(1, 5) și B(4, 5) → dreapta orizontală
- Dacă A(2, 3) și B(2, 7) → dreapta verticală
- Dacă A(1, 1) și B(3, 4) → dreapta oblică

29. Limbajul Python Limbajul C/C++


x1, y1 = map(int, input().split()) #include <iostream>
x2, y2 = map(int, input().split()) using namespace std;
int main() {
# Verificăm tipul dreptei int x1, y1, x2, y2;
if y1 == y2: cin >> x1 >> y1;
print("dreaptă orizontală") cin >> x2 >> y2;
elif x1 == x2:
if (y1 == y2)
print("dreaptă verticală")
else: cout << "dreaptă orizontală";
print("dreaptă oblică") else if (x1 == x2)
cout << "dreaptă verticală";
else
cout << "dreaptă oblică";
return 0;
}

30. Să se scrie un program în Python/C++ care citește de la tastatura un număr natural


c, format din exact 13 cifre, reprezentând un cod de identificare spațială primit de un
explorator intergalactic. Codul conține, în ordine, următoarele informații:
- prima cifră → sectorul spațial (1–9),
- următoarele două cifre → anul nașterii (ultimele două cifre),
- următoarele două cifre → luna nașterii,
- următoarele două cifre → ziua nașterii,
- restul cifrelor nu sunt relevante pentru această problemă.
Să se extragă din codul c anul, luna și ziua nașterii ale exploratorului și le afișează în
formatul: [Link]

43
Pentru conversia completă a anului:
- dacă sectorul este 1 sau 2 → anul este în secolul 1900,
- dacă sectorul este 5 sau 6 → anul este în secolul 2000.
Exemplu: Pentru c = 1960501223457 → sector = 1, an = 1960, luna = 05,
ziua = 01. Data nașterii: 01.05.1960

Limbajul Python

c = int(input())
# Extragem componentele prin operații matematice
sector = c // 10**12
an = (c // 10**10) % 100
luna = (c // 10**8) % 100
zi = (c // 10**6) % 100
# Determinăm anul complet
if sector == 1 or sector == 2: an_final = 1900 + an
elif sector == 5 or sector == 6: an_final = 2000 + an
else: an_final = -1
if an_final != -1:
print(f"Data nașterii: {zi:02}.{luna:02}.{an_final}")
else: print("Cod invalid – sector necunoscut.")
Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
long long c;
cin >> c;
int sector = c / 1000000000000, an = (c / 10000000000) % 100;
int luna = (c / 100000000) % 100, zi = (c / 1000000) % 100;
int an_final;
if (sector == 1 || sector == 2) an_final = 1900 + an;
else if (sector == 5 || sector == 6) an_final = 2000 + an;
else { cout << "Cod invalid – sector necunoscut.\n";
return 0; }
cout << "Data nașterii: " << zi << ".";
cout << luna << "." << an_final << endl;
return 0; }

31. Scrieți un program în Python/C++ care citește de la tastatură un număr natural N (cu
cel mult 3 cifre), reprezentând un indiciu numeric primit de Făt-Frumos de la înțeleptul
păzitor al Arsenalului Fermecat.
Făt-Frumos se pregătește să pornească într-o nouă aventură prin Pădurea de Aramă.
Înainte de plecare, trebuie să aleagă sabia potrivită. Pentru a face alegerea, el aplică
următorul algoritm magic, în funcție de N:
 dacă N are o singură cifră, sabia aleasă are numărul egal cu dublul lui N,
 dacă N are două cifre, sabia aleasă are numărul egal cu produsul cifrelor lui N,
 dacă N are trei cifre, sabia aleasă are numărul format din prima și ultima cifră
ale lui N, în această ordine.

44
Programul va afișa numărul sabiei pe care trebuie să o aleagă Făt-Frumos.
Exemple:
 N = 7 → o cifră → sabia: 2×7 = 14
 N = 46 → două cifre → sabia: 4×6 = 24
 N = 381 → trei cifre → sabia: 3 și 1 → 31

Limbajul Python

n = int(input())
if n < 10:
rezultat = 2 * n
elif n < 100:
cif1 = n // 10
cif2 = n % 10
rezultat = cif1 * cif2
elif n < 1000:
prima = n // 100
ultima = n % 10
rezultat = prima * 10 + ultima
else:
rezultat = -1
if rezultat != -1: print("Sabia aleasă are numărul:", rezultat)
else: print("Numărul N nu este valid.")
Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int rezultat;
if (n < 10) rezultat = 2 * n;
else if (n < 100) {
int cif1 = n / 10;
int cif2 = n % 10;
rezultat = cif1 * cif2; }
else if (n < 1000) {
int prima = n / 100; int ultima = n % 10;
rezultat = prima * 10 + ultima; }
else {
cout << "Numărul N nu este valid." << endl;
return 0; }
cout << "Sabia aleasă are numărul: " << rezultat << endl;
return 0;
}

45
32. Scrieți un program Python/C++, care citește de la tastatură, un număr natural n. Să
se verifice dacă numărul are exact 3 cifre și dacă suma dintre cea mai mare și cea mai
mică cifră a sa este egală cu cifra rămasă. Dacă numărul este special, adică suma
dintre cea mai mare și cea mai mică cifră a sa este egală cu cifra rămasă atunci se
afișează mesajul special altfel se va afișa mesajul NU
De exemplu, pentru n = 231 programul afișează mesajul special
pentru n = 543 programul afișează mesajul NU

Limbajul Python Limbajul C/C++


n = int(input("n= ")) #include <iostream>
if 100 <= n <= 999: #include <algorithm>
using namespace std;
c1 = n // 100 int main() {
c2 = (n // 10) % 10 int n,maxi,mini,suma,suma_cif;
c3 = n % 10 cout<<"n= ";
cin >> n;
cifre = [c1, c2, c3] if (n >= 100 && n <= 999)
maxi = max(cifre) { int c1 = n / 100;
mini = min(cifre) int c2 = (n / 10) % 10;
int c3 = n % 10;
suma = maxi + mini maxi=max(max(c1,c2),c3);
med = sum(cifre)-maxi-mini mini-min(min(c1,c2),c3);
if suma == med: suma=mini+maxi;
suma_cif=c1+c2+c3-maxi-mini;
print("special") if ( suma==suma_cif)
else: print("NU") cout <<"special”;
else cout << "NU";
}
return 0;}

33. Scrieți un program în Python/C++, care citește trei numere reale pozitive. Programul
verifică dacă cele trei numere citite pot fi laturile unui triunghi. În caz afirmativ,
calculează și afișează pe ecran aria și perimetrul triunghiului. De exemplu pentru
a=3, b=4, c=5 se afisează perimetrul=12 și aria=6.

Limbajul Python

import math
# Citim laturile
a = float(input("Latura a: "))
b = float(input("Latura b: "))
c = float(input("Latura c: "))
# Verificăm dacă pot forma un triunghi
if a + b > c and a + c > b and b + c > a:
perimetru = a + b + c
s = perimetru / 2
aria = [Link](s * (s - a) * (s - b) * (s - c))
print(f"Perimetrul triunghiului este: {perimetru}")
print(f"Aria triunghiului este: {aria}")
else: print("Triunghi invalid.")

46
Limbajul C/C++

#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a, b, c, perimetru, s, aria;
cout << "Introdu laturile triunghiului: ";
cin >> a >> b >> c;
if (a + b > c && a + c > b && b + c > a) {
perimetru = a + b + c;
s = perimetru / 2;
aria=sqrt(s*(s-a)*(s-b)*(s-c));
cout<<"Perimetrul triunghiului este: " << perimetru << endl;
cout<<"Aria triunghiului este: " << aria << endl;
}
else cout<<"Triunghi invalid." << endl;
return 0;
}

34. Într-un joc de criptografie, două cifre magice x și y (numere naturale nenule mai mici
decât 10) sunt alese pentru a genera un cod numeric dublu: codul direct se obține
așezând cifra x înaintea cifrei y (adică xy) și codul invers se obține așezând cifra y
înaintea cifrei x (adică yx). Scrieți un program în Python/C++, care după generarea
acestor două coduri, verifică dacă cel mai mare dintre cele două coduri este divizibil cu
cel mai mic și afișeze ambele coduri pe aceeași linie. Dacă unul este divizibil cu
celălalt se afișează mesajul Cod complet valid dacă nu, se afișează mesajul Cod
parțial valid.
De exemplu, Pentru x=4 și y=2 se va afişa 42 și 24 Cod parțial valid, iar
pentru x=1 și y=1 se va afişa 11 și 11 Cod complet valid
Limbajul Python Limbajul C/C++
x, y = map(int, #include <iostream>
input("Introduceți cifrele x și y
using namespace std;
(1-9): ").split())
int main() {
if 0 < x < 10 and 0 < y < 10: int x, y, cod1, cod2;
cod1 = x * 10 + y cin >> x >> y;
cod2 = y * 10 + x
if (x>0 && x< 10 && y>0 && y<10) {
print(f"{cod1} {cod2}") cod1=x*10+y; cod2=y*10+x;
minim = min(cod1, cod2) cout<<cod1<<" "<<cod2<<endl;
int minim = min(cod1, cod2);
maxim = max(cod1, cod2)
int maxim = max(cod1, cod2);
if maxim % minim == 0: if (maxim % minim == 0)
print("Cod complet valid.") cout<<"Cod complet valid."<< endl;
else: else
print("Cod parțial valid.") cout<<"Cod parțial valid."<< endl;
}
return 0;
}

47
35. Scrieți un program în Python/C++, care citește un număr natural nenul de două cifre,
format doar din cifre pare (0, 2, 4, 6 sau 8). Programul transformă fiecare cifră a
numărului după următoarele reguli:dacă cifra este divizibilă cu 4, se înlocuiește cu
câtul împărțirii la 2, dacă cifra este mai mare decât 5, se înlocuiește cu modulul
împărțirii la 3 iar celelalte cifre nu se modifică. Dacă numărul rezultat este identic cu
cel inițial, se va afișa mesajul: fără modificări, altfel, se va afișa noul număr obținut.
De exemplu, pentru n=84, programul va afișa 42, iar pentru n=20 programul va afișa
fără modificări.
Limbajul Python Limbajul C/C++
n = int(input("Introduceti un #include <iostream>
numar format doar din doua cifre using namespace std;
pare: ")) int main(){
int n,zeci,unitati,nou_zeciș
if n < 10 or n > 99 or any(int(c)
% 2 != 0 int nou_unitati,n_nou;
for c in str(n)): cout << "Introduceti un numar
print("Numarul trebuie sa aiba format din doua cifre pare: ";
exact doua cifre pare.")
cin>>n;
else:
zeci = n // 10 if((n < 10 || n > 99)||( zeci %
2 != 0 || unitati % 2 != 0)){
unitati = n % 10
cout << "Numarul trebuie sa aiba
def transforma(c): exact doua cifre!"<< endl;
if c % 4 == 0: return 0;}
return c // 2 else{
elif c > 5: zeci=n/10; unitati=n%10;
return c % 3 if (zeci % 4 == 0)
else: nou_zeci= zeci/ 2;
return c else if (zeci > 5)
nou_zeci=zeci % 3;
nou = transforma(zeci) * 10 + else nou_zeci=zeci;
transforma(unitati) if (unitati % 4 == 0)
nou_unitati= unitati/ 2;
if nou == n:
print("fara modificari") else if (unitati > 5)
else: nou_unitati=unitati % 3;
print(nou) else nou_unitati=unitati;
n_nou=nou_zeci*10+ nou_unitati;
if (n_nou == n)
cout << "fara modificari";
else cout << n_nou ;
}
return 0;
}

36. Scrieți un program Python/C++ care să citească de la tastatură, de pe linii separate,


două numere întregi a și b de exact două cifre, apoi să se calculeze și să afișeze, pe
ecran, cel mai mic număr de două cifre care se poate forma cu cifrele unităților din
fiecare număr. De exemplu, pentru a=32 și b=21, va afișa: 12

48
Limbajul Python Limbajul C/C++

a=int(input("a=")) #include <iostream>


b=int(input("b="))
using namespace std;
if a//10 < b//10:
int main()
print((a//10)*10+b//10)
else: { int a,b;
print((b//10)*10+a//10) cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
if(a/10<b/10)
cout<<(a/10)*10+b/10;
else cout<<b/10*10+a/10;
return 0;
}

37. Scrieți un program Python/C++ care să citească de la tastatură un număr întreg n de


exact trei cifre, apoi să se calculeze și să afișeze, pe ecran, cea mai mare cifră a
numărului n. De exemplu, pentru n=352 va afișa: 5

Limbajul Python Limbajul C/C++

n=int(input("n=")) #include <iostream>


maxim=n%10 using namespace std;
if maxim<(n//10)%10: int main()
maxim=(n//10)%10 {
if maxim<(n//100): int n,maxim;
maxim=n//100 cout<<"n=";
print(maxim) cin>>n;
maxim=n%10;
if(maxim<n/10%10)
maxim=n/10%10;
if(maxim<n/100)
maxim=n/100;
cout<<maxim;
return 0;
}

38. Scrieți un program Python/C++ care să citească de la tastatură trei numere reale
pozitive a, b, c, apoi să afișeze, pe ecran, mesajul "Da" dacă cele trei numere pot
fi laturile unui triunghi sau mesajul "Nu" în caz contrar. De exemplu, pentru a=7,
b=8, c=9 va afișa: Da

Limbajul Python Limbajul C/C++

a=float(input("a=")) #include <iostream>


b=float(input("b=")) using namespace std;
c=float(input("c=")) int main()
if a+b>c and a+c>b and b+c>a: { float a,b,c;

49
print("Da") cout<<"a="; cin>>a;
else: cout<<"b="; cin>>b;
print("Nu") cout<<"c="; cin>>c;
if(a+b>c && a+c>b && b+c>a)
cout<<"Da";
else cout<<"Nu";
return 0;
}

39. Scrieți un program Python/C++ care citește un număr real x și afișează valoarea
funcției date mai jos.

{
x − 2 , daca x ≤ 5
f ( x )= 3 ∗ ( x − 1 ) , daca x ∈ (5,20 )
x ∗ ( x − 1 ) , daca x ≥ 20

Limbajul Python Limbajul C/C++

x=float(input("x=")) #include <iostream>


if x<=5: using namespace std;
print(x-2)
int main()
elif x<20:
{
print(3*(x - 1))
float x;
else:
cout<<"x="; cin>>x;
print(x*(x - 1))
if(x<=5) cout<<x-2;
else if(x<20) cout<<3*(x-1);
else cout<<x*(x-1);
return 0;
}
40. Scrieți un program Python/C++ care citește trei numere întregi a,b,c. și care afișea-
ză mesajul "Da" daca valoarea lui c este divizor comun pentru celelalte două și mesa-
jul "Nu" în caz contrar. De exemplu, pentru a=4, b=8, c=2 va afișa: Da

Limbajul Python Limbajul C/C++

a=int(input("a=")) #include <iostream>


b=int(input("b=")) using namespace std;
c=int(input("c=")) int main()
if a%c==0 and b%c==0: { int a,b,c;
print("Da") cout<<"a="; cin>>a;
else: cout<<"b="; cin>>b;
print("Nu") cout<<"c="; cin>>c;
if(a%c==0 && b%c==0)
cout<<"Da";
else cout<<"Nu";
return 0;
}

50
41. Scrieți un program Python/C++ care citește o literă n și care afișează litera următoare
din alfabetul englez în cazul în care litera citită este o vocală iar în caz contrar afișea-
ză litera precedentă din alfabet. De exemplu, pentru n=’o’ va afișa: p
Limbajul Python Limbajul C/C++
n=input("n=") #include <iostream>
if n in ['a','e','i','o','u']: using namespace std;
print(chr(ord(n)+1)) int main()
else: { char n;
print(chr(ord(n)-1)) cout<<"n="; cin>>n;
if(n=='a'||n=='e'||n=='i'||
n=='o'||n=='u')
cout<<char(n+1);
else cout<<char(n-1);
return 0; }

42. Scrieți un program Python/C++ care citește două numere naturale a și b (a<b) și care
afișează câte pătrate perfecte sunt în intervalul [a,b].
Limbajul Python Limbajul C/C++
import math #include <iostream>
a=int(input("a=")) #include <cmath>
b=int(input("b=")) using namespace std;
int main()
a1=[Link](a) { int a,b,a1,b1;
if a1*a1!=a: cout<<"a="; cin>>a;
a1=[Link](a1) cout<<"b="; cin>>b;
b1=[Link](b) a1=sqrt(a);
print(int(b1)-int(a1)+1) if(a1*a1!=a) a1++;
b1=sqrt(b);
cout<<b1-a1+1;
return 0;
}

43. Scrieți un program Python/C++ care citește două numere întregi nenule a și b (a<b)
și care afișează mesajul "Da" dacă cele două numere au același semn și mesajul
"Nu" în caz contrar. De exemplu, pentru a=7, b=8 va afișa: Da

Limbajul Python Limbajul C/C++


a=int(input("a=")) #include <iostream>
b=int(input("b=")) using namespace std;
if a*b>0: print("Da") int main()
else: print("Nu") { int a,b;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
if(a*b>0) cout<<"Da";
else cout<<"Nu";
return 0; }

51
44. Scrieți un program Python/C++ care citește un număr natural a ce reprezintă anul
unui eveniment. Se cere să se afișeze mesajul "Anul este bisect" dacă valoarea
citită reprezintă un an bisect și mesajul "Nu este an bisect" în caz contrar.
Limbajul Python
a =int(input("a= "))
if a%400==0 or a%4==0 and a%100!=0 : print("Anul este bisect")
else: print("Nu este an bisect")

Limbajul C/C++

#include <iostream>
using namespace std;
int main()
{ int a;
cout<<"a="; cin>>a;
if ((a%400==0)||(a%4==0 && a%100!=0)) cout<<"Anul este bisect";
else cout<<"Nu este an bisect";
return 0; }

45. Scrieți un program Python/C++ care citește patru numere naturale distincte a,b,c,d
ce reprezintă capetele a două intervale [a,b] și [c,d] cu (a<b și c<d). Se cere să
se afișeze intervalul dat de intersecția celor două intervale citite sau mesajul "Multi-
mea vida" dacă nu există interval de intersecție. De exemplu, pentru a=3, b=8,
c=5, d=9 va afișa: [5,8]
Limbajul Python Limbajul C/C++
a=int(input("a=")) #include <iostream>
b=int(input("b=")) using namespace std;
c=int(input("c=")) int main()
d=int(input("d="))
{ int a,b,c,d,inc,fin;
inc=a
cout<<"a="; cin>>a;
if inc<c:
cout<<"b="; cin>>b;
inc=c
cout<<"c="; cin>>c;
fin=b
if fin>d: cout<<"d="; cin>>d;
fin=d inc=a;
if(inc<c) inc=c;
if inc<=fin: fin=b;
print(f"[{inc},{fin}]") if(fin>d) fin=d;
else: if (inc<=fin)
print("Multimea vida") cout<<"["<<inc<<","<<fin<<"]";
else cout<<"Multimea vida";
return 0;
}

46. Scrieți un program care să citească de la tastatură un număr natural a, apoi să se


afișeze, pe ecran, ultima cifră a numărului 2a.
De exemplu, pentru a=31 se va afișa: 8.

52
Limbajul Python Limbajul C/C++

a = int(input("a= ")) #include <iostream>


using namespace std;
if a==0:
int main()
print(1)
{ int a;
else: cout<<"a="; cin>>a;
if a%4==0: print(6) if(a==0) cout<<1;
if a%4==1: print(2) else
{ if(a%4==0)cout<<6;
if a%4==2: print(4)
if(a%4==1)cout<<2;
if a%4==3: if(a%4==2)cout<<4;
print(8) if(a%4==3)cout<<8;
}
return 0; }

47. Scrieți un program care să citească de la tastatură, două numere naturale nenule a
și b, apoi un caracter op. Dacă caracterul op este ‘a’ se afișează media aritmetică
a celor două numere naturale nenule. Dacă caracterul op este ‘h’ se afișează media
armonică a celor două numere naturale nenule. Dacă caracterul op este ‘g’ se
afișează media geometrică a celor două numere naturale nenule. Să se calculeze și
să se afișeze, pe ecran, în funcție de opțiune, rezultatul mediei corespunătoare. De
exemplu, pentru a=31,b=17,op=’h’ se va afișa: 21.9583.

Limbajul Python Limbajul C/C++


import math #include <iostream>
a = int(input("a= ")) #include <cmath>
b = int(input("b= ")) using namespace std;
op= input("op= ")
int main()
if op=='a':
{int a,b;
print((a+b)/2)
char op;
if op=='h':
print(2*a*b/(a+b)) cout<<"a="; cin>>a;
if op=='g': cout<<"b="; cin>>b;
print([Link](a*b)) cout<<"op=";cin>>op;
if(op=='a') cout<<(a+b)/2.;
if(op=='h')
cout<<2.*a*b/(a+b);
if(op=='g')
cout<<1.*sqrt(a*b);
return 0;
}

48. Scrieți un program care să citească de la tastatură un caracter c. Dacă caracterul c


este o literă mică a alfabetului englez, să se afișeze pe ecran, Caracterul c este
o literă mică!. Dacă caracterul c este o literă mare a alfabetului englez, să se
afișeze pe ecran, Caracterul c este o literă mare!. Dacă caracterul c nu
este o literă mică și nici o literă mare a alfabetului englez, să se afișeze pe ecran,
Caracterul c NU este o literă!. De exemplu, pentru c=’h’ se va afișa:
Caracterul h este o literă mică!

53
Limbajul Python
c= input("c= ")
if c>='a' and c<='z': print("Caracterul ",c," este o litera mica!")
else:
if c>='A' and c<='Z':
print("Caracterul ",c," este o litera mare!")
else: print("Caracterul ",c," NU este o litera!")
Limbajul C/C++

#include <iostream>
#include <cmath>
using namespace std;
int main()
{ char c;
cout<<"c=";cin>>c;
if(islower(c))cout<<"Caracterul "<<c<<" este o litera mica!";
else
if(isupper(c)) cout<<"Caracterul "<<c<<" este o litera mare!";
else cout<<"Caracterul "<<c<<" NU este o litera!";
return 0; }

49. Scrieți un program care să citească de la tastatură o opțiune, în funcție de opțiune se


vor citi datele de intrare, apoi se va calcula și afișa aria figurii geometrice.
Dimensiunile figurilor geometrice sunt numere naturale nenule. Dacă caracterul op
este ‘p’, se citește de la tastatură latura pătratului și se afișează aria acestuia. Dacă
caracterul op este ‘d’, se citesc de la tastatură cele două dimensiuni, lungimea și
lățimea dreptunghiului și se afișează aria acestuia. Dacă caracterul op este ‘r’ se
citesc de la tastatură valorile celor două diagonale ale rombului și se afișează aria
acestuia. Dacă caracterul op este diferit de cacaterul ’p’sau ’d’ sau ’r’, atunci să
se afișeze mesajul NU este o figura geometrica!. Să se calculeze și să se
afișeze, pe ecran, în funcție de opțiune, rezultatul ariei corespunătoare figurii
geometrice alese. De exemplu, pentru op=’p’, iar pentru latura pătratului se citește
l=5, se va afișa: Aria patratului= 25.
Limbajul Python

op= input("op= ")


if op=='p':
l= int(input("l= "))
print("Aria patratului= ",l*l)
else:
if op=='d':
L= int(input("L= "))
l= int(input("l= "))
print("Aria dreptunghiului =",L*l)
else:
if op=='r':
d1= int(input("d1= "))
d2= int(input("d2= "))
print("Aria rombului = ",d1*d2/2)
else: print("NU este o figura geometrica!")

54
Limbajul C/C++

#include <iostream>
using namespace std;
int main()
{ int a,b;
cout<<"a= "; cin>>a;
cout<<"b= "; cin>>b;
cout<<a*100+b<<" ";<<b*100+a;
return 0;
}

50. Să se scrie un program în Python/C++ care afișează pe ecran poziția punctului dat
prin coodonatele carteziene A(xA, yA). În funcție de poziția acestuia se va afișa un
mesaj coresunzător.
De exemplu:
- pentru xA=-2 și yA=-4, pe ecran se va afișa: Punctul se află în cadranul III.
- pentru xA=0 și yA=-4, pe ecran se va afișa: Punctul se află pe axa OY.

Limbajul Python
xA, yA = map(int, input().split())
# Verificăm pozitia punctului
if xA>0 and yA>0:
print("Punctul se află în cadranul I")
if xA<0 and yA>0:
print("Punctul se află în cadranul II")
if xA<0 and yA<0:
print("Punctul se află în cadranul III")
if xA>0 and yA<0:
print("Punctul se află în cadranul IV")
if xA!=0 and yA==0:
print("Punctul se află pe axa OX")
if xA==0 and yA!=0:
print("Punctul se află pe axa OY")
if xA==0 and yA==0:
print("Punctul se află în centrul reperului cartezian")
Limbajul C/C++
#include <iostream>
using namespace std;
int main() {
int xA, yA;
cin >> xA >> yA;
if (xA>0 && yA>0) cout<<"Punctul se află în cadranul I";
if (xA<0 && yA>0) cout<<"Punctul se află în cadranul II";
if (xA<0 && yA<0) cout<<"Punctul se află în cadranul III";
if (xA>0 && yA<0) cout<<"Punctul se află în cadranul IV";
if (xA!=0 && yA==0) cout<<"Punctul se află pe axa OX";
if (xA==0 && yA!=0) cout<<"Punctul se află pe axa OY";
if (xA==0 && yA==0)
cout<<"Punctul se află în centrul reperului cartezian";
return 0;
}

55
IV. Structuri repetitive

IV.1. Instrucțiunea repetitivă WHILE

1. Scrieți un program Python/C++ care citește de la tastatură un număr natural n și


determină suma cifrelor lui n. Programul afișează pe ecran suma determinată. De
exemplu, pentru n=1234, programul va afișa valoarea 10.

Limbajul Python Limbajul C/C++

n = int(input("n= ")) #include <iostream>


S = 0 using namespace std;
while n > 0 : int main()
{ int n,S=0;
S = S + n % 10
cout<<"n="; cin>>n;
n = n // 10
while(n>0)
print("Suma=", S)
{ S = S + n % 10;
n = n / 10;
}
cout<<"Suma="<<S;
return 0;
}

2. Într-o piscină sunt x litri de apă (x>0). Fiind o vară extrem de călduroasă, după fiecare m
minute, un sfert din cantitatea de apă din piscină se evaporă.
Scrieți un program Python/C++ care să citească trei numere naturale x, m și y și care
să determine după câte minute vor rămâne în piscină cel mult y litri de apă.
De exemplu, pentru x=1000, m=15, y=505 se va afișa 45 minute

Limbajul Python Limbajul C/C++

x,m,y = map(int, input().split()) #include <iostream>


x=float(x) using namespace std;
int main()
timp=0
{ float x;
while x>y :
int m,y,timp=0;
x=3*x/4
cin>>x>>m>>y;
timp=timp+m
while(x>y)
print(timp)
{ x=3*x/4; timp=timp+m;}
cout<<timp;
return 0;
}

3. Scrieți un program Python/C++ care citește succesiv, de pe linii separate, un șir de


numere naturale până la citirea valorii 0 (care finalizează citirea). Programul determină
și afișează pe ecran cel mai mare număr nenul din șirul citit împreună cu numărul său
de apariții.
De exemplu, pentru șirul de valori: 5 12 7 31 7 21 31 3 8 0, se va afișa 31 2,
cu semnificația: cel mai mare număr din șir 31 și apare de 2 ori.

56
Limbajul Python Limbajul C/C++

nr=int(input()) #include <iostream>


maxnr=0 using namespace std;
ap=0; int main()
while nr>0: { int nr,ap=0,maxnr=0;
if nr>maxnr: cin>>nr;
while (nr>0)
maxnr=nr
{ if (nr>maxnr)
ap=1 {maxnr=nr;ap=1;}
else: else
if nr==maxnr: ap=ap+1 if (nr==maxnr)ap++;
nr=int(input()) cin>>nr;
print(maxnr,ap) }
cout<<maxnr<<' '<<ap;
return 0; }

4. Scrieți un program Python/C++ citește de la tastatură un număr natural n și care să


calculeze și să afișeze suma tuturor numerelor obținute prin permutări circulare la
dreapta ale cifrelor lui n.
De exemplu, pentru n=132, programul calculează suma 132+321+213 și afișează 666.

Limbajul Python Limbajul C/C++


#include <iostream>
n=int(input()) using namespace std;
p=0 int main()
scif=0 { long long S;
while n>0 : int n,scif=0,p=0;
scif=scif+n%10 cin>>n;
n=n//10 while(n>0)
p=p*10+1 {scif=scif+n%10; n=n/10;
S=scif*p p=p*10+1;}
print(S) S=scif*p;
cout<<S;
return 0; }

5. Scrieți un program Python/C++ citește de la tastatură un număr natural n și care


calculează suma tuturor numerelor distincte prefixe pentru n. Programul afișează pe
ecran suma determinată. De exemplu, pentru n=21637 programul afișează 24039
reprezentând suma prefixelor lui n(=2+21+216+2163+21637)

Limbajul Python Limbajul C/C++

#include <iostream>
n=int(input())
using namespace std;
Sp=0
int main()
while n>0 :
{ int Sp=0, n;
Sp=Sp+n
cin>>n;
n=n//10
while(n>0)
print(Sp)
{ Sp=Sp+n; n=n/10; }
cout<<Sp;
return 0; }

57
6. Scrieți un program Python/C++ citește de la tastatură, de pe aceeași linie, un număr
natural n și o cifră k. Programul calculează și afișează pe ecran produsul cifrelor lui n,
diferite de cifra k. Dacă n nu conține cifre diferite de k, programul va afișa valoarea -1.
De exemplu, pentru n=25632 și k=2 programul va afișa 90, iar pentru n=333, k=3 va
afișa -1
Limbajul Python Limbajul C/C++

n,k = map(int, input().split()) #include <iostream>


p=1 using namespace std;
ok=0
int main()
while n>0 :
{ int n, p=1,k,ok=0,c;
c=n%10
cin>>n>>k;
n=n//10
while(n>0)
if c!=k :
{ c=n%10; n=n/10;
ok=1
if(c!=k) { ok=1; p=p*c; }
p=p*c
}
if ok==1 : print(p)
if(ok==1)cout<<p;
else : print(-1)
else cout<<-1;
return 0;
}

7. Scrieți un program Python/C++ citește de la tastatură, de pe aceeași linie, două numere


naturale x şi y, cu au acelaşi număr de cifre. Programul construiește numărul z format
astfel: fiecare cifră a acestuia este egală cu partea întreagă a mediei aritmetice a
cifrelor, cu același ordin de mărime, din numerele x și y. Programul va afișa pe ecran
numărul construit. De exemplu, pentru x=2514 şi y=5628, programul va afișa 3516

Limbajul Python Limbajul C/C++


x,y = map(int, input().split()) #include <iostream>
p=1 using namespace std;
z=0 int main()
while x>0 : { int x,y,z=0,p=1,c;
c = (x%10 + y%10)//2 cin>>x>>y;
x = x//10 while(x>0)
y = y//10 { c=(x%10+y%10)/2;
z = z + c*p x=x/10; y=y/10;
p = p*10 z=z+c*p; p=p*10; }
print(z) cout<<z;
return 0;
}

8. Scrieți un program Python/C++ care citește succesiv, de pe linii separate, un șir de


litere mici din alfabetul englez, separate prin câte un spațiu, până la citirea caracterului
‘#’ (care finalizează citirea). Programul determină și afișează pe ecran prima literă din
șirul citit împreună cu numărul său de apariții
De exemplu, pentru șirul de litere: g a x g g a t b g #, se va afișa g 4, cu
semnificația: prima literă din șirul citit este g și apare de 4 ori.

58
Limbajul Python Limbajul C/C++

#include <iostream>
c=input()
nrap=1 using namespace std;
int main()
x=input()
{ char c, x;
while x!='#': int nrap=1;
if x==c : nrap=nrap+1 cin>>c;
x=input() cin>>x;
print(c, nrap) while (x!='#')
{ if (x==c) nrap++;
cin>>x; }
cout<<c<<' '<<nrap;
return 0;
}

9. Scrieți un program Python/C++ care citește succesiv, de pe linii separate, un șir de


litere mici din alfabetul englez, separate prin câte un spațiu, până la citirea caracterului
‘#’ (care finalizează citirea). Programul determină și afișează pe ecran câte vocale apar
în șirul citit. Se consideră vocale literele a,e,i,o,u. De exemplu, pentru șirul de
litere: i a x g q a e b o #, se va afișa 5, cu semnificația: șirul citit conține 5
vocale.
Limbajul Python Limbajul C/C++
x=input() #include <iostream>
nrap=0 using namespace std;
while x!='#' : int main()
if x in "aeiou" : nrap=nrap+1 { char x;
x=input() int nrap=0;
print(nrap) cin>>x;
while (x!='#')
{ if (x=='a'||x=='e'||x=='i'||
x=='o'||x=='u') nrap++;
cin>>x; }
cout<<nrap;
return 0;
}

10. Scrieți un program Python/C++ pentru a simula jocul „Ghicește numărul”, în care
calculatorul generează un număr aleator în intervalul [0,100]. Utilizatorul încearcă să
ghicească numărul, tastând câte un număr din intervalul dat. Pentru fiecare număr
tastat, pe ecran va apărea unul dintre mesajele: Prea mare!, Prea mic sau Ai ghicit.
Jocul se termină atunci când apare pe ecran mesajul Ai ghicit! sau după maximum 7
încercări.
Limbajul Python
import random
s = 1
d = 100
k = 7
ok = 0
x = [Link](0, 100)
while k:
print("Număr încercări rămase =", k)
n = int(input("Scrie un număr = "))
k -= 1

59
if x == n:
print("Ai ghicit!")
ok = 1
break
else:
if n > x:
d = n - 1
print("Prea mare!")
else:
s = n + 1
print("Prea mic!")
if s == d:
d += 1
if ok == 0: print("Ai pierdut!")
Limbajul C/C++
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{ int s=1, d=100,x,n,k=7,ok=0;
x= rand()%101;
while(k)
{ cout<<"Numar incercari ramase = "<<k<<endl;
cout<<"scrie un numar=";
cin>>n; k--;
if(x==n) { cout<<"Ai ghicit!"; ok=1;break; }
else {
if(n>x)
{ d=n-1; cout<<"Prea mare!"<<endl; }
else
{ s=n+1; cout<<"Prea mic!"<<endl; }
if(s==d)d++;
}
}
if(ok==0) cout<<"Ai pierdut!";
return 0;

11. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<109)
și care calculează și afișează suma cifrelor impare ale lui n. Dacă n nu are cifre impare
se afișează mesajul fara impare.
Exemplu: pentru n=514017 se afișează 14

Limbajul Python Limbajul C/C++


n = int(input()) #include <iostream>
suma = 0 using namespace std;
gasit = False int main()
if n == 0: {
print("fara impare") unsigned n;
else: cin>>n;
while n > 0: int suma=0;
cifra = n % 10 bool exista=false;
if cifra % 2 == 1: if(n==0)
suma += cifra { cout<<"fara impare";
gasit = True return 0;

60
n //= 10 }
if gasit: while(n>0)
print(suma) {
else: int cifra=n%10;
print("fara impare") if(cifra%2==1)
{ suma+=cifra;
exista=true;
}
n/=10;
}
if(exista) cout<<suma;
else cout<<"fara impare";
return 0;
}

12. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<109)
și care calculează și afișează numărul cifrelor pare ale lui n.
Exemplu: pentru n=20781 se afișează 3

Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


count = 0 using namespace std;
if n == 0: int main()
count = 1 { unsigned n;
while n > 0: cin>>n;
cifra = n % 10 int cnt=0;
if cifra % 2 == 0: if (n==0) cnt=1;
count += 1 while(n>0)
n //= 10 { int cifra=n%10;
print(count) if(cifra%2==0) cnt++;
n/=10;
}
cout<<cnt;
return 0;
}

13. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<109)
și care calculează și afișează suma tuturor prefixelor pare ale lui n. Dacă nu există cifre
pare în număr se afișează mesajul fara pare.
Exemplu: pentru n=234032 se afișează 236608 (234032+2340+234+2=236608)

Limbajul Python Limbajul C/C++


n = int(input()) #include <iostream>
temp = n using namespace std;
nr_cifre = 0 int main()
while temp > 0: {
nr_cifre += 1 unsigned n;
temp //= 10 cin>>n;
putere = 10 ** (nr_cifre - 1) unsigned temp=n;
suma = 0 int nr_cifre=0;
exista = False if(temp==0)
while putere > 0: nr_cifre=1;
prefix = n // putere else
if prefix % 2 == 0: while(temp>0)

61
suma += prefix {
exista = True nr_cifre++;
putere //= 10 temp/=10;
if exista: }
print(suma) unsigned putere=1;
else: int i=1;
print("fara pare") while(i<nr_cifre)
{
putere*=10;
i++;
}
unsigned suma=0;
bool exista=false;
while(putere>0)
{
unsigned prefix=n/putere;
if(prefix%2==0)
{
suma+=prefix;
exista=true;
}
putere/=10;
}
if(exista)
cout<<suma;
else
cout<<"fara pare";
return 0;
}

14. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<109)
și, de pe același rând o cifră k. Programul afișează produsul cifrelor egale cu k sau
mesajul nu exista dacă numărul n nu conține cifra k.

Exemplu: pentru n=234232 și k=2 atunci se afișează 8 iar pentru n=343 și k=2 atunci
se afișează nu exista

Limbajul Python Limbajul C/C++


n, k = map(int, input().split()) #include <iostream>
produs = 1 using namespace std;
gasit = False int main()
if n == 0 and k == 0: {
produs = 0 unsigned n;
gasit = True int k;
while n > 0: cin>>n>>k;
cifra = n % 10 unsigned temp=n;
if cifra == k: int produs=1;
produs *= k bool exista=false;
gasit = True if (temp==0 && k==0)
n //= 10 {
if gasit: produs=0;
print(produs) exista=true;
else: }
print("nu exista")

62
while(temp>0)
{
int cifra=temp%10;
if (cifra==k)
{
produs*=k;
exista=true;
}
temp/=10;
}
if(exista)
cout<<produs;
else
cout<<"nu exista";
return 0;
}

15. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


(9<n<109) și afișează mesajul crescator dacă cifrele sunt în ordine strict crescătoare,
mesajul descrescator dacă cifrele sunt în ordine descrescătoare sau mesajul nu
dacă cifrele nu sunt nici în ordine crescătoare nici în ordine descrescătoare.
Exemplu: pentru n=8410 atunci se afișează descrescator

Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


prev = n % 10 using namespace std;
n //= 10
is_cresc = True int main()
is_descresc = True {
while n > 0: unsigned n;
cifra = n % 10 cin>>n;
if cifra >= prev:
int prev=n%10;
is_cresc = False
if cifra <= prev: n/=10;
is_descresc = False bool crescator=true;
prev = cifra bool descrescator=true;
n //= 10 while(n>0)
if is_cresc: {
print("crescator") int cifra=n%10;
elif is_descresc: if(cifra>=prev)
print("descrescator") crescator=false;
else: if(cifra<=prev)
print("nu") descrescator=false;
prev=cifra;
n/=10;
}
if(crescator)
cout<<"crescator";
else if(descrescator)
cout<<"descrescator";
else
cout<<"nu";
return 0;
}

63
16. Scrieți un program Python/C++ care citește de la tastatură, de pe același rând, două
numere naturale a și b (a,b<109). Programul afișează în ordine strict crescătoare cifrele
comune celor două numere, separate printr-un spatiu, sau mesajul nu exista dacă a și
b nu au cifre comune.
Exemplu: pentru a=1020105 și b=25802 atunci se afișează 0 2 5
Limbajul Python
a, b = map(int, input().split())
def extrage_cifre(numar):
cifre = []
if numar == 0:
[Link](0)
while numar > 0:
c = numar % 10
if c not in cifre:
[Link](c)
numar //=10
return cifre
cifre_a = extrage_cifre(a)
cifre_b = extrage_cifre(b)
comune = []
for c in range(10):
if c in cifre_a and c in cifre_b: [Link](c)
if comune:
for c in comune: print(c, end=' ')
else: print("nu exista")
Limbajul C++
#include <iostream>
using namespace std;
bool exista_cifra(unsigned numar, int cifra)
{
if(numar==0)
return cifra==0;
while(numar>0)
{
if(numar%10==cifra)
return true;
numar/=10;
}
return false;
}

int main()
{
unsigned a,b;
cin>>a>>b;
bool exista_comune=false;
for(int c=0; c<=9; c++)
if(exista_cifra(a,c) && exista_cifra(b,c))
{ cout<<c<<' ';
exista_comune=true;
}
if (!exista_comune)
cout<<"nu exista";
return 0;
}

64
17. Scrieți un program Python/C++ care citește de la tastatură, de pe același rând, două
numere naturale a și b (a,b<109). Programul afișează cea mai mică cifră comună celor
două numere sau mesajul nu exista dacă a și b nu au cifre comune.
Exemplu: pentru a=1927165 și b=25802 atunci se afișează 2
Limbajul Python
a, b = map(int, input().split())
cifre_a = set()
cifre_b = set()
temp = a
while temp > 0:
cifre_a.add(temp % 10)
temp //= 10
temp = b
while temp > 0:
cifre_b.add(temp % 10)
temp //= 10
comune = cifre_a.intersection(cifre_b)
if comune:
print(min(comune))
else:
print("nu exista")
Limbajul C++
#include <iostream>
using namespace std;
int main()
{ unsigned a,b;
cin>>a>>b;
int min_comun=-1;
for(int cifra=0; cifra<=9; cifra++)
{ unsigned temp=a;
bool gasit_in_a=false;
if(temp==0 && cifra==0) gasit_in_a=true;
while(temp>0)
{
if(temp%10==cifra)
{ gasit_in_a=true; break; }
temp/=10;
}

if (!gasit_in_a) continue;
temp=b;
bool gasit_in_b=false;
if(temp==0 && cifra==0) gasit_in_b=true;
while(temp>0)
{
if(temp%10==cifra) { gasit_in_b=true; break;}
temp/=10;
}
if (gasit_in_b)
{ min_comun=cifra; break; }
}
if (min_comun==-1) cout<<"nu exista";
else cout<<min_comun;
return 0;
}

65
18. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<109) și
afișează numărul maxim de cifre alăturate identice în n.
Exemplu: pentru n=844111100 atunci se afișează 4

Limbajul Python

n = int(input())
if n == 0: print(1)
else:
max_repet = 1
crt_repet = 1
ult_cif = n % 10
n //= 10
while n > 0:
cif = n % 10
n //= 10
if cif == ult_cif:
crt_repet += 1
if crt_repet > max_repet:
max_repet = crt_repet
else:
crt_repet = 1
ult_cif = cif
print(max_repet)

Limbajul C++
#include <iostream>
using namespace std;
int main()
{ unsigned n;
cin>>n;
if(n==0){ cout<<1; return 0; }
int max_repet=1;
int crt_repet=1;
int ult_cif=n%10;
n/=10;
while(n>0)
{ int cif=n%10;
n/=10;
if(cif==ult_cif)
{ crt_repet++;
if (crt_repet>max_repet)
max_repet=crt_repet;
}
else { crt_repet=1; ult_cif=cif; }
}
cout<<max_repet;
return 0;
}

66
19. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<109) și
afișează cel mai mare subnumăr de trei cifre din n. Dacă n are mai puțin de trei cifre se
afișează mesajul cifre insuficiente, iar dacă nu există un astfel de subnumăr se
afișează mesajul imposibil.
Exemplu: pentru n=405176 atunci se afișează 517

Limbajul Python
n = int(input())
if n < 100: print("cifre insuficiente")
else:

max_sub = n%1000
n=n//10
while n > 99:
if n%1000>max_sub:
max_sub = n%1000
n=n//10
print(max_sub)

Limbajul C++

#include <iostream>
using namespace std;
int main()
{ int n,max_sub;
cin>>n;
if(n<100) cout<<"cifre insuficiente";
else
{
max_sub=n%1000;
n=n/10;
while(n>99)
{ if(n%1000>max_sub) max_sub=n%1000;
n=n/10;
}
cout<<max_sub; }
return 0;
}

20. Scrieți un program Python/C++ care citește de la tastatură, de pe același rând, două
numere naturale nenule a și b (a,b<109). Programul afișează cel mai mare divizor
comun și cel mai mic multiplu comun al celor două numere, separate prin enter, ca în
exemplu.
Exemplu: pentru a=18 și b=24 atunci se afișează
(18,24)=6
[18,24]=72
Limbajul Python
# CMMDC folosind algoritmul lui Euclid
def calc_cmmdc(a, b):
while b != 0:
r = a % b
a = b
b = r
return a

67
a, b = map(int, input().split())
# CMMDC
cmmdc = calc_cmmdc(a, b)
# CMMMC
cmmmc = a * b // cmmdc
# Rezultatele in formatul cerut
print(f"({a},{b})={cmmdc}")
print(f"[{a},{b}]={cmmmc}")

Limbajul C++
#include <iostream>
using namespace std;
// CMMDC folosind algoritmul lui Euclid
int calc_cmmdc(int a,int b)
{ while(b!=0)
{ int r=a%b; a=b; b=r; }
return a;
}
int main()
{ int a,b;
cin>>a>>b;
int cmmdc=calc_cmmdc(a,b);
// 1LL pentru a evita depasirea int
long long cmmmc=1LL*a*b/cmmdc;
cout<<"("<<a<<","<<b<< ")="<<cmmdc<<'\n';
cout<<"["<<a<<","<<b<< "]="<<cmmmc;
return 0;
}

21. Scrieți un program Python/C++, care citește de la tastatură un număr natural nenul n,
n<20 și afișează, pe ecran, al n-lea termen impar din șirul lui Fibonacci.
Șirul lui Fibonacci este generat astfel: fibo(n)=1, dacă n=1 sau n=2, iar
fibo(n)=fibo(n-1)+fibo(n-2), dacă n>2.
De exemplu, pentru n=5, programul va afișa valoarea 13, deoarece al 5-lea număr
impar din șirul lui Fibonacci: 1,1,2,3,5,8,13,21,34,55,89,... este 13.

Limbajul Python Limbajul C/C++


n = int(input("n=")) #include <iostream>
a = 1 using namespace std;
b = 1 int main()
if n<=2: rez=1 { int n,a,b,c,rez;
else: cout<<"n="; cin>>n;
while n-2 > 0 : a=1; b=1;
c = a + b if(n<=2) rez=1;
a = b else
b = c while(n-2>0)
{ c = a + b;
if c%2 != 0: n=n-1
a=b; b=c;
if n-2==0: rez=c
if(c%2!=0) n=n-1;
if(n-2==0) rez=c;
print(rez) }
cout<<rez;
return 0;
}

68
22. Scrieți un program Python/C++, care citește de la tastatură un număr natural x
(x<1000000), apoi calculează și afișează, pe ecran, numărul cifrelor nenule din scrierea
în baza 2 a numărului x.
De exemplu, pentru x=1024, se va afișa 1, iar pentru x=15, se va afișa 4
Limbajul Python Limbajul C/C++
x = int(input("x=")) #include <iostream>
nrunu=0 using namespace std;
while x>0 : int main()
nrunu=nrunu+x%2 { int x,nrunu=0;
x=x//2 cin>>x;
print(nrunu) while(x)
{ nrunu+=x%2; x/=2;}
cout<<nrunu;
return 0;
}

23. Scrieți un program Python/C++, care citește succesiv, de pe linii separate, un șir de
numere naturale, cu cel mult opt cifre fiecare, până la citirea valorii 0 (care finalizează
citirea). Programul determină și afișează, pe ecran, câte numere din șirul citit au suma
cifrelor reprezentării în baza 7 egală cu 3.
De exemplu, pentru șirul de valori: 3, 33, 51, 14, 1, 9, 0, se va afișa 3, cu
semnificația: numerele 3, 51, 9 au suma cifrelor reprezentării în baza 7 egală cu 3,
deoarece 3=3*7^0, 51=1*7^2+0*7^1+2*7^0 și 9=1*7^1+2*7^0.

Limbajul Python Limbajul C/C++


x=int(input()) #include <iostream>
rez=0 using namespace std;
while x>0: int main()
s=0 { int x,rez=0,s;
while x>0: cin>>x;
s=s+x%7 while (x){
x=x//7 s=0;
if s==3: rez=rez+1 while(x) { s=s+x%7; x=x/7;}
x=int(input()) if (s==3)rez++;
print(rez) cin>>x; }
cout<<rez;
return 0;
}

24. Scrieți un program în Python/C++, care citește de la tastatură un număr natural nenul
n, cu cel mult opt cifre, apoi calculează și afișează, pe ecran, cel mai mare exponent a
din descompunerea n!=6a*b, unde n!=1*2*...*n.
De exemplu, dacă n=10, se va afișa: 4 deoarece 6=3*2, iar cifra 3 apare mai rar decât
2 în descompunere și 10!=1*2*(3*1)*4*5*(3*2)*7*8*(3*3)*10,

Adică este suficient să identificăm exponentul cel mai mare al lui 3 10!
=3^4*2^4*b=6^4*b, deci a=4

Explicația rezolvării: n! conține [10/3] multipli nenuli ai lui 3 și [10/(3*3)]


multipli nenuli ai lui 3*3, deci rezultatul este [10/3]+[10/(3*3)]=3+1=4.

69
Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>


p,a=3,0 using namespace std;
int main()
while n>=p :
{ int n,p=3,a=0;
a+=n//p
p*=3 cin>>n;
while(n>=p)
print(a) {a=a+n/p;
p=p*3;}
cout<<a;
return 0;
}

25. Scrieți un program Python/C++, care citește de la tastatură un număr natural nenul n
(n<25), reprezentând numărul de trepte pe care le are o scară. Știind că un roboțel
poate să urce fie o treaptă, fie două trepte ale scării, programul afișează, pe ecran,
numărul de posibilități distincte pe care le are roboțelul astfel încât să urce scara cu n
trepte.
De exemplu, pentru n=4 programul afișează 5 deoarece roboțelul are următoarele
posibilități distincte de urcare a celor n trepte ale scării: 1111 (adică urcă de 4 ori
câte o treptă) sau 112 sau 121 sau 211 sau 22 (adică urcă de 2 ori câte 2 trepte).

Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>


a,b=1,2 using namespace std;
if n<=2: rez=n int main()
else:
{ int n, a=1, b=2, c, rez;
while n-2>0:
cin>>n;
c=a+b if(n<=2) rez=n;
a=b else
b=c while(n-2>0)
n=n-1
{ c=a+b;a=b;b=c;n--;
if n-2==0: rez=c
if(n-2==0) rez=c;}
print(rez)
cout<<rez;
return 0;
}

26. Scrieți un program în Python/C++ care citește de la tastatură două numere naturale: p,
reprezentând lungimea primului salt al unei broscuțe, și m, reprezentând numărul total
de salturi.
O broscuță curajoasă pornește într-o aventură sărind printr-un tărâm mlăștinos. Fiecare
salt al broscuței este de două ori mai lung decât saltul anterior. Programul va calcula și
afișa distanța totală parcursă de broscuță după m salturi.
Exemplu: dacă p = 2 și m = 5, atunci broscuța sare: 2 + 4 + 8 + 16 + 32 = 62
Se va afișa: 62

70
Limbajul Python Limbajul C/C++
p = int(input()) #include <iostream>
m = int(input()) using namespace std;
total = 0 int main() {
salt = p int p, m;
i = 1 cin >> p>>m;
int total = 0, salt = p, i = 1;
while (i <= m) {
while i <= m: total += salt;
total += salt salt *= 2;
salt *= 2 i++;
}
i += 1
cout << total;
return 0;
print(total) }

27. Să se scrie un program Python/C++ care citește de la tastatură un număr natural n și


afișează, pe ecran prima putere a lui 2 strict mai mare decât n și exponentul
corespunzător. Exemplu: pentru n = 70, se va afișa 2^7 = 128.

Limbajul Python Limbajul C/C++


n = int(input()) #include <iostream>
using namespace std;
putere = 1
int main() {
exp = 0 int n;
while putere <= n: cin >> n;
putere *= 2 int putere = 1;
int exp = 0;
exp += 1
while (putere <= n)
print(putere) { putere *= 2; exp++; }
cout << putere;
return 0;
}

28. Scrieți un program în Python/C++ care citește de la tastatură un număr natural n și


afișează, separate prin spațiu, primele n numere triunghiulare.
Prietenul nostru, Darius, tocmai a învățat la școală despre numere triunghiulare. El a
aflat că al k-lea număr triunghiular este suma primelor k numere naturale (1+2+3+...
+k). Fascinat de această proprietate, Darius vrea să afle care sunt primele n astfel de
numere.
Exemplu: Pentru n = 5, se va afișa: 1 3 6 10 15 (explicație: 1, 1+2, 1+2+3, 1+2+3+4,
1+2+3+4+5)

Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


i = 1 using namespace std;
triunghiular = 0 int main() {
int n,i = 1;
while i <= n:
cin >> n;
triunghiular += i int triunghiular = 0;
print(triunghiular, end=' ') while (i <= n) {
i + = 1 triunghiular += i;
cout <<triunghiular<<" ";
i++;
}
return 0;}

71
29. Scrieți un program în Python/C++ care citește de la tastatură un număr natural n (n≥2)
și afișează un triunghi isoscel format din steluțe *, cu baza și laturile pline, dar cu
interiorul gol.
Exemplu : Pentru n=5
*
* *
* *
* *
*********

Limbajul Python

n = int(input())
i = 1
while i < n:
spaces = n - i
print(" " * spaces, end="")
if i == 1: print("*")
else: print("*" + " " * (2 * i - 3) + "*")
i += 1
# Afișăm baza completă
print("*" * (2 * n - 1))
Limbajul C/C++
#include <iostream>
using namespace std;
int main() {
int n, n=1;
cin >> n;
while (i < n) {
int sp = 0;
while (sp < n - i) { cout << " "; sp++; }
if (i == 1) cout << "*";
else {
cout << "*";
int inner = 0;
while (inner < 2 * i - 3) { cout << " "; inner++; }
cout << "*"; }
cout << endl;
i++;
}
int stars = 0;
while (stars < 2 * n - 1) { cout << "*"; stars++; }
cout << endl;
return 0;
}

72
30. Scrieți un program Python/C++, care citește de la tastatură un șir de numere întregi de
maxim 9 cifre pana la întâlnirea lui 0 ( 0 nu face parte din șir). Să se afișeze inversul
celui mai mic număr din șir.
De exemplu: pentru șirul 18 84 98 12 24 0 se va afișa 21
Limbajul Python Limbajul C/C++
#include <iostream>
x=int(input()) using namespace std;
rez=0
while x>0: int main() {
if x<minim: int n, minim = 1000000000,rez=0;
minim=x
x=int(input()) cin>>x;
while minim>0: while (x) {
rez==rez*10+minim%10 if (x < minim) minim= n;
minim==minim//10
print(rez) cin>>x; }
while (minim > 0) {
rez = rez * 10 + minim % 10;
minim /= 10;
cout << rez << endl;
return 0;
}

31. Scrieți un program Python/C++, care citește de la tastatură un număr natural n


(n<1000000).Să se construiască un nou număr format doar din cifrele impare ale lui n,
păstrând ordinea inițială a acestora. Dacă nu există cifre impare, se va afișa mesajul:
„Nu există cifre impare.” altfel se va afișa numărul construit.
De exemplu, pentru n=23456, se va afișa 35, iar
pentru n=2468, se va afișa „Nu există cifre impare.”
Limbajul Python
x = int(input("x="))

rez=0
p=1

nr_inv=0
while x>0 :
cif=n%10
if cif%2 !=0:
nr_inv=nr_inv*10+cif
n=n//10
while nr_inv>0:
rez==rez*10+nr_inv%10
nr_inv=nr_inv//10
if rez!=0: print("Numărul format din cifrele impare este:", rez)
else: print("Nu există cifre impare in nr. initial.")

73
Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n, rez = 0, cif;
cin >> n;
int p = 1,nr_inv = 0;
while (n > 0) {
cif = n % 10;
if (cif % 2 != 0) nr_inv = nr_inv*10+ cif;
n /= 10;
}
while (nr_inv > 0) {
rez = rez*10+nr_inv% 10; nr_inv /= 10;
}
if (rez != 0)
cout << "Numărul format din cifrele impare este: " << rez;
else cout << "Nu există cifre impare în nr. initial.";
return 0;
}

32. Scrieți un program Python/C++, care citește un număr natural n, cu cel mult opt cifre
nenule fiecare. Programul determină dacă numărul citit este un număr mijlociu superior
adică este format doar din cifre de 5 si 6 și va afișa pe ecran mesajul mijlociu superior
dacă este mijlociu superior altfel mesajul Nu. De exemplu, pentru n=56565, se va afișa
mijlociu superior, iar pentru n=2468, se va afișa Nu.

Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>


ok = 1
using namespace std;
while n > 0:
cif = n % 10 int main() {
if cif != 5 and cif != 6: long long n;
ok = 0 int ok=1,cif;
break cin >> n;
n //= 10 while (n > 0) {
if ok: cif = n % 10;
print("mijlociu superior") if (cif!= 5 && cif != 6) {
else: ok = 0; break;
print("NU") }
n /= 10;
}
if (ok)
cout << "mijlociu superior."
else cout << "NU;
return 0;
}

33. Scrieți un program în Python/C++, care citește de la tastatură un număr natural nenul n,
cu cel mult opt cifre. Să se afișeze, pe ecran, cel mai mic număr prim mai mare sau egal
decât n.
De exemplu, dacă n=14, se va afișa: 17

74
Limbajul Python Limbajul C/C++

n = int(input("n= ")) #include <iostream>


ok = 0 using namespace std;
while True: int main() {
ok = 1 int n;
if n < 2: cout << "n= "; cin >> n;
int ok = 0;
ok = 0
while (true) {
d = 2 ok = 1;
while d * d <= n and ok == 1: if (n < 2) ok = 0;
if n % d == 0: int d = 2;
while(d * d <=n && ok== 1){
ok = 0
if (n % d == 0) ok = 0;
d += 1 d++;
if ok == 1: }
break if (ok == 1) break;
n++;
n += 1
}
print("Cel mai mic numar prim mai cout << "Cel mai mic numar
mare sau egal cu n este:", n) prim mai mare sau egal cu n este:
" << n << endl;
return 0;
}

34. Scrieți un program în Python/C++, care citește de la tastatură un număr natural nenul n,
cu cel mult opt cifre.Să se afișeze, pe ecran, toate numerele naturale mai mici decât n
care sunt divizibile cu 3.
De exemplu, pentru n=14, se va afișa: 3,6,9,12, iar pentru n=2 se va afișa mesajul:
nimic
Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


if n <= 1: using namespace std;
pass # Nu afișăm nimic int main() {
else: int n;
gasit = False cin >> n;
i = 3 bool gasit = false;
while i < n: i=3;
print(i, end=", ") while(i<n) {
gasit = True cout << i;
i += 3 gasit = true;
if gasit: if (i + 3 < n)cout<<",";
print("\b\b ")
i+=3;
# curăță virgula de la final
}
if (!gasit)cout << "nimic";
cout << endl;
return 0;
}

35. Se dă un număr natural nenul n, reprezentând numărul de termeni ai unui șir de


numere naturale, și cele n numere naturale. Să se afișeze pentru fiecare număr natural
citit, cifra de control a acestuia. Scrieți un program Python/C++ care să calculeze și să
afișeze cifra de control pentru fiecare termen al șirului. De exemplu, pentru n=5 și
șirul 31 3 17 2000 0, pe ecran se va afișa: 4 3 8 2 0.

75
Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


i = 1 using namespace std;
while i <= n: int main() {
a = int(input())
int n, a, i=1;
if a==0:
print(a," ") cin >>n;
else: while (i <= n) {
if a%9==0: cin>>a;
print(9," ") if(a==0)
else: cout<<a<<" ";
print(a%9," ") else if(a%9==0)
i += 1
cout<<9<<" ";
else
cout<<a%9<<" ";
i+=1;}
return 0;
}

36. Se dă un număr natural nenul n, reprezentând numărul de termeni ai unui șir de


numere naturale, și cele n numere naturale. Să se afișeze pentru fiecare număr natural
citit, cea mai mare bază în care poate fi scris numărul. Scrieți un program Python/C++
care afișeze pe ecran, pentru fiecare număr natural citit, cea mai mare bază în care
poate fi scris numărul. De exemplu, pentru n=5 și șirul 31 83 17 2000 10, pe
ecran se va afișa: 4 9 8 3 2.

Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


i = 1 using namespace std;
while i <= n: int main() {
a = int(input()) int n, a, i=1;
Max=0 cin >>n;
while a>0: while (i <= n){
if a%10>Max: cin>>a;
Max=a%10 int Max=0;
while (a>0){
a=a//10
if(a%10>Max) Max=a%10;
print(Max+1," ") a=a/10; }
i += 1 cout<<Max+1<<" ";
i+=1;
}
return 0;
}

37. Se dă un număr natural nenul n, reprezentând numărul de termeni ai unui șir de


numere naturale, și cele n numere naturale. Să se afișeze pentru fiecare număr natural
citit, DA dacă numărul este fericit, respectiv NU altfel. Un număr este fericit dacă prima
cifrăa numărului este strict mai mare decât restul cifelor. Scrieți un program Python/C++
care afișeze pe ecran, pentru fiecare număr natural citit, DA/ NU dacă numărul este
fericit/ nu este fericit. De exemplu, pentru n=5 și șirul 31 83 17 2000 10, pe
ecran se va afișa: DA DA NU DA DA.

76
Limbajul Python Limbajul C/C++
n = int(input()) #include <iostream>
i = 1 using namespace std;
while i <= n: int main() {
a = int(input())
int n;
Max=0
while a>9: cin >>n;
if a%10>Max: int i = 1, a;
Max=a%10 while (i <= n) {
a=a//10 cin>>a;
if a>Max: int Max=0;
print("DA ") while (a>9)
else:
{ if(a%10>Max)Max=a%10;a=a/10;}
print("NU ")
i += 1 if(a>Max) cout<<"DA ";
else cout<<"NU ";
i+=1;
}
return 0;
}

38. Se dă un număr natural nenul n, reprezentând numărul de termeni ai unui șir de


numere naturale, și cele n numere naturale cu exact patru cifre fiecare număr. Să se
afișeze pentru fiecare număr natural citit, cel mai mare număr obținut dintre numărul
format cu primele două cifre, respectiv numărul format cu ultimele două cifre ale
numărului curent. Scrieți un program Python/C++ care afișeze pe ecran, cel mai mare
număr obținut dintre numărul format cu primele două cifre, respectiv numărul format cu
ultimele două cifre ale numărului curent. De exemplu, pentru n=5 și șirul 3117
2383 2000 1003 2025, pe ecran se va afișa: 31 83 20 10 25.

Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


i = 1 using namespace std;
while i <= n: int main() {
a = int(input()) int n, I, a;
cin >>n;
if a%100>a//100:
while (i <= n) {
print(a%100," ") cin>>a;
else: if(a%100>a/100)cout<<a%100<<" ";
print(a//100," ") else cout<<a/100<<" ";
i += 1 i+=1;
}
return 0;
}

39. Se dă un număr natural nenul n, reprezentând numărul de termeni ai unui șir de


numere naturale, și cele n numere naturale cu cel mult 13 cifre fiecare număr. Să se
afișeze pentru fiecare număr natural citit, -1 dacă prima cifră a numărului nu este cifră
primă, altfel să se afișeze numărul. Scrieți un program Python/C++ care afișeze pe
ecran, pentru fiecare număr natural citit, -1 dacă prima cifră a numărului nu este cifră

77
primă, altfel să se afișeze numărul. De exemplu, pentru n=5 și șirul 3117 2383
2000 1003 8025, pe ecran se va afișa: 3117 2383 2000 -1 -1.

Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


using namespace std;
i = 1
int main() {
while i <= n: int n,i=1, a, ca;
a = int(input()) cin >>n;
ca=a while (i <= n) {
cin>>a; ca=a;
while a>9: while (a>9)a=a/10;
a=a//10 if(a==2 || a==3 ||a==5
if a==2 or a==3 or a==5 or a==7: ||a==7)
print(ca," ") cout<<ca<<" ";
else cout<<-1<<" ";
else: i+=1;
print(-1," ") }
i += 1 return 0;}

78
IV.2. Instrucțiunea repetitivă For

1. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<100)


și determină suma răsturnatelor tuturor numerelor naturale cel mult egale cu n.
Programul afișează pe ecran suma determinată. De exemplu, pentru n=12, programul
va afișa valoarea 78 (=1+2+3+...+9+1+11+21).

Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


using namespace std;
S = 0
int main()
for i in range(1, n + 1): { int n,S=0,i,x;
if i < 10: S += i cin>>n;
for(i=1;i<=n;i++)
else:
if(i<10)S=S+i;
x = (i % 10) * 10 + (i // 10) else
S += x { x=i%10*10+i/10;
print(S) S=S+x; }
cout<<S;
return 0;
}

2. Scrieți un program Python/C++ care să citească două numere naturale a și b


(10<a<b<10000) și care afișeze pe ecran, în ordine crescătoare, separate prin câte un
spațiu, toate numerele naturale din intervalul [a,b] care au cifra unităților strict mai
mare decât cifra zecilor. De exemplu, pentru a=10 și b=25, programul va afișa, pe o
linie a ecranului: 12 13 14 15 16 17 18 19 23 24 25

Limbajul Python Limbajul C/C++

a,b = map(int, input().split()) #include <iostream>


s='' using namespace std;
for c in range(a, b + 1): int main()
{ int a,b,c;
if c//10%10<c%10 : s=s+str(c)+' '
cin>>a>>b;
print(s)
for(c=a;c<=b;c++)
if(c/10%10<c%10)
cout<<c<<" ";
return 0;
}

3. Scrieți un program Python/C++ care să afișeze, în ordine lexicografică, toate cuvintele


palindrom formate din exact trei litere mici astfel: au prima literă și ultima literă consoane
identice din mulțimea {d,w}, iar a doua literă este o vocală {a,e,i,o,u}.
De exemplu, primul cuvânt afișat este dad.

79
Limbajul Python Limbajul C/C++

#include <iostream>
lit13 = "dw"
using namespace std;
lit2 = "aeiou"
int main()
for x in lit13 : { char lit1[]="dw";
for y in lit2 : char lit2[]="aeiou";
int i,j;
print(x+y+x)
for(i=0;i<2;i++)
for(j=0;j<5;j++)
{cout<<lit1[i]<<lit2[j];
cout<<lit1[i]<<endl;}
return 0;
}

4. Scrieți un program Python/C++ care să afișeze toate cuvintele formate din exact trei
litere astfel: prima literă este din mulțimea {a,b,c}, a doua literă este din mulțimea
{x,y} iar ultima literă este din mulțimea {w,u}.

Limbajul Python Limbajul C/C++

lit1 = ['a','b','c'] #include <iostream>


using namespace std;
lit2=['x','y']
int main()
lit3=['w','u']
{ char lit1[]="abc";
for x in lit1 : char lit2[]="xy";
for y in lit2 : char lit3[]="wu";
for z in lit3 : int i,j,k;
print(x+y+z) for(i=0;i<3;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
{ cout<<lit1[i]<<lit2[j];
cout<<lit3[k]<<endl;}
return 0;
}

5. Scrieți un program Python/C++ care citește un număr natural n și apoi n numere


naturale reprezentând temperaturile înregistrate într-un oraș timp de n zile. Programul
determină temperaturile minimă și maximă din cele n zile precum și temperatura medie
a temperaturilor înregistrate.
De exemplu, pentru n=7 și temperaturile: 12, 16, 13, 5, 8, 23, 17 se vor afișa
pe ecran valorile: 5 23 13.4286 , reprezentând temperaturile: minimă, maximă și
medie.

80
Limbajul Python Limbajul C/C++
#include <iostream>
n,t = map(int, input().split()) using namespace std;
t1=t2=t int main()
{ int n,t,t1,t2,i;
s=t float t3,s;
for c in range(2, n + 1): cin>>n>>t;
t1=t2=t; s=t;
t=int(input())
for(i=2;i<=n;i++)
s=s+t { cin>>t;
if t<t1 : t1=t if(t<t1) t1=t;
if(t>t2) t2=t;
if t>t2 : t2=t
s=s+t; }
t3=s/n t3=s/n;
cout<<t1<<" "<<t2<<" "<<t3;
print(t1,t2,t3)
return 0;
}

6. Scrieți un program Python/C++ care să citească o cifră nenulă k și să afișeze pe


ecran tabla înmulțirii cu cifra respectivă în formatul din exemplu.
De exemplu, pentru k=5, programul va afișa: 1x5=5
2x5=10
3x5=15 , etc

Limbajul Python Limbajul C/C++

#include <iostream>
k=int(input())
using namespace std;
for c in range(1, 10): int main()
{int k,i;
print(c,'x',k,'=',c*k)
cin>>k;
for(i=1;i<=9;i++)
cout<<k<<"x"<<i<<"="<<k*i<<endl;
return 0;
}

7. Scrieți un program Python/C++ care să citească un număr natural nenul n (n<101)și


care să afișeze pe ecran toate perechile distincte de numere naturale nenule (a,b) cu
proprietatea că a+b=n și a<b. Programul va afișa perechile pe ecran.
De exemplu, pentru n=7, se vor afișa perechile: 1 6, 2 5, 3 4.

Limbajul Python Limbajul C/C++


#include <iostream>
n=int(input())
using namespace std;
for a in range(1, n//2+1): int main()
{ int n,a,b;
for b in range(a+1, n):
cin>>n;
if a+b==n: for(a=1;a<=n/2;a++)
for(b=a;b<n;b++)
print(a,b)
if(a+b==n)
cout<<a<<" "<<b<<endl;
return 0;
}

81
8. Scrieți un program Python/C++ care să citească un număr natural nenul n (n<101) și
care să afișeze pe ecran toate tripletele de numere naturale nenule (a,b,c) cu
proprietatea că a*b*c=n și a<b<c. Programul va afișa tripletele pe ecran. Dacă nu
există aceste triplete, programul va afișa mesajul Nu există.
De exemplu, pentru n=24, se vor afișa tripletele: 1 2 12, 1 3 8, 1 4 6, 2 3 4.

Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>


using namespace std;
for a in range(1, n//2+1):
int main()
for b in range(a+1, n):
{int n,a,b,c;
for c in range(b+1,n): cin>>n;
if a*b*c==n: for(a=1;a<=n/2;a++)
print(a,b,c) for(b=a+1;b<n;b++)
for(c=b+1;c<=n;c++)
if(a*b*c==n)
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}

9. Scrieți un program Python/C++ care să citească două numere naturale nenule n și k


(n,k<1000) . Programul determina și va afișa pe ecran rezultatul produsului n*10k.
De exemplu, pentru n=123 și k=5, programul va afișa 12300000.

Limbajul Python Limbajul C/C++

n,k=map(int,input().split()) #include <iostream>


using namespace std;
s=str(n)
int main()
for i in range(1, k+1):
{ int n,k,i;
s=s+'0' cin>>n>>k; cout<<n;
print(s) for(i=1;i<=k;i++) cout<<0;
return 0;
}

10. Definim un număr 3-prim ca fiind un număr natural format doar din cifrele {3,5,7}.
Scrieți un program Python/C++ care să afișeze toate numerele 3-prime formate din
câte patru cifre.
Limbajul Python Limbajul C/C++
#include <iostream>
for i in range(3, 8,2):
using namespace std;
for j in range(3, 8,2): int main()
{int i,j,k,p;
for k in range(3, 8,2):
for(i=3;i<=7;i+=2)
for p in range(3, 8,2): for(j=3;j<=7;j+=2)
for(k=3;k<=7;k+=2)
print(i*1000+j*100+k*10+p)
for(p=3;p<=7;p+=2)
cout<<i*1000+j*100+k*10+p<<endl;
return 0;
}

82
11. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<103)
și care calculează și afișează suma: 1+1·2+2·3+3·4+...+n·(n+1).
Exemplu: pentru n=5 se afișează 71

Limbajul Python Limbajul C/C++


n = int(input()) #include <iostream>
suma = 1 using namespace std;
for i in range(1, n+1): int main()
suma += i * (i + 1) {
int n;
print(suma)
cin >> n;
int suma = 1;
for (int i = 1; i <=n; i++)
suma += i * (i + 1);
cout<<suma;
return 0; }

12. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<100)
și care calculează și afișează suma: 1+1·2+1·2·3+1·2·3·4+...
+1·2·3·...·n·(n+1). Exemplu: pentru n=4 se afișează 153

Limbajul Python Limbajul C/C++


import math #include <iostream>
n = int(input()) using namespace std;
suma = 0 int main()
for k in range(1, n + 2): {
suma += [Link](k) int n;
print(suma) cin>>n;
long long suma=0;
long long fact=1;
for (int i=1;i<=n+1;++i)
{fact *= i;suma += fact;}
cout<<suma;
return 0;
}

13. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<106) și care afișează mesajul prim dacă n este număr prim sau mesajul neprim în
caz contrar.
Exemplu: pentru n=29 se afișează prim iar pentru n=27 se afișează neprim

Limbajul Python
import math
n = int(input())
if n <= 1: print("neprim")
elif n == 2: print("prim")
elif n % 2 == 0: print("neprim")
else :
e_prim = True
for d in range(3, int([Link](n)) + 1, 2):
if n % d == 0:
e_prim = False
break
print("prim" if e_prim else "neprim")

83
Limbajul C/C++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
cin>>n;
if (n<2)
{ cout<<"neprim"; return 0; }
if (n==2)
{ cout<<"prim"; return 0; }
if (n%2==0)
{ cout<<"neprim"; return 0;}
bool e_prim=true;
int limita=sqrt(n);
for (int d=3;d<=limita;d += 2)
if (n%d==0)
{ e_prim=false; break; }
cout<<(e_prim?"prim":"neprim");
return 0;
}

14. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(1<n<106) și care afișează, separate printr-un spatiu, numerele prime mai mici sau
egale cu n.
Exemplu: pentru n=30 se afișează 2 3 5 7 11 13 17 19 23 29
Limbajul Python
import math
def este_prim(numar):
if numar < 2:
return False
if numar == 2:
return True
if numar % 2 == 0:
return False
for d in range(3, int([Link](numar)) + 1, 2):
if numar % d == 0:
return False
return True

n = int(input())
for numar in range(2, n + 1):
if este_prim(numar):
print(numar, end=" ")

Limbajul C/C++
#include <iostream>
#include <cmath>
using namespace std;
bool e_prim(int nr)
{
if (nr < 2) return false;
if (nr == 2) return true;
if (nr % 2 == 0) return false;

84
for (int d=3;d*d<=nr;d += 2)
if (nr%d==0)
return false;
return true;
}
int main()
{
int n;
cin >> n;
for (int i=2;i<=n;++i)
if (e_prim(i))
cout<<i<<' ';
return 0;
}

15. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<100)
și apoi n numere naturale nenule cu cel mult 4 cifre, separate prin enter, și care
afișează, separate printr-un spațiu, trei valori, astfel: valoarea maximă, valoarea minimă
și media valorilor pare.
Exemplu: dacă pentru n se citește 5 iar valorile sunt 1 2 4 10 7 (separate prin
enter) se afișează 10 1 5.33333 (numărul de zecimale este implicit)
Limbajul Python
n = int(input())
maxim = None
minim = None
suma_pare = 0
numar_pare = 0
for i in range(n):
x = int(input())
# inițializare minim și maxim la prima valoare
if maxim is None or x > maxim:
maxim = x
if minim is None or x < minim:
minim = x
if x % 2 == 0:
suma_pare += x
numar_pare += 1
if numar_pare > 0:
media_pare = suma_pare / numar_pare
else:
media_pare = 0
print(maxim, minim, media_pare)

Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int x;
int maxim = 0, minim = 0;
int suma_pare = 0, nr_pare = 0;
for (int i = 0; i < n; ++i)
{
cin >> x;

85
if (i == 0) maxim = minim = x;
else
{
if (x > maxim) maxim = x;
if (x < minim) minim = x;
}
if (x % 2 == 0)
{ suma_pare += x; nr_pare++; }
}
double media=(nr_pare>0)?(double)suma_pare/nr_pare:0.0;
cout<<maxim<<' '<<minim<<' '<<media;
return 0;
}

16. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<100)
și apoi n numere naturale nenule cu cel mult 8 cifre, separate prin enter, și care
afișează, separate printr-un spatiu, valorile care au exact același număr de cifre ca
prima valoare dintre cele n.
Exemplu: dacă pentru n se citește 6 iar valorile sunt 212 3 1234 233 256 6789
(separate prin enter), se afișează 212 233 256

Limbajul Python Limbajul C/C++


#include <iostream>
n = int(input())
using namespace std;
val1 = int(input()) int nrCifre(int x)
cif1 = len(str(val1)) { int cifre = 0;
print(val1, end=' ') while (x > 0)
{ x /= 10; cifre++; }
for _ in range(n - 1):
return cifre;
x = int(input())
}
if len(str(x)) == cif1: int main()
{ int n;
print(x, end=' ')
cin >> n;
int x, val1 = 0, cif1=0;
for (int i=0;i<n;++i)
{ cin>>x;
if (i==0)
{ val1 = x;
cif1=nrCifre(val1);
}
if (nrCifre(x)==cif1)
cout<<x<<' ';
}
return 0;
}

17. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n<100)
și apoi n numere naturale nenule cu cel mult 6 cifre, separate prin enter, și care
afișează, separate printr-un spatiu, valorile care au exact același număr de divizori ca
prima valoare dintre cele n.
Exemplu: dacă pentru n se citește 6 iar valorile sunt 10 34 7 80 8 14 (separate
prin enter), se afișează 10 34 8 14

86
Limbajul Python
def nr_divizori(x):
if x == 1:
return 1

k = 0
sqrt_x = int(x ** 0.5)
for d in range(1, sqrt_x + 1):
if x % d == 0:
k += 1 if d == x // d else 2
return k

n = int(input())
val1 = int(input())
nr_div_val1 = nr_divizori(val1)
print(f"{val1} ({nr_div_val1})", end=' ')
for _ in range(n - 1):
x = int(input())
nr_div_x = nr_divizori(x)
if nr_div_x == nr_div_val1:
print(x, end=' ')

Limbajul C/C++
#include <iostream>
#include <cmath>
using namespace std;
int nrDivizori(int x)
{
if (x==1)
return 1;
int cnt=0;
int rad=sqrt(x);
for (int d=1;d<=rad;++d)
if (x%d==0)
cnt += (d==x/d)?1:2;
return cnt;
}
int main()
{ int n;
cin>>n;
int x, val1, nrDiv_val1;
cin>>val1;
nrDiv_val1=nrDivizori(val1);
cout<<val1<<' ';
for (int i=1;i<n;++i)
{ cin>>x;
if (nrDivizori(x)==nrDiv_val1)
cout<<x<<' ';
}
return 0;
}

87
18. Scrieți un program Python/C++ care citește de la tastatură două numere naturale a și b
(0<a<b<1000) , separate prin enter, și care afișează, separate printr-un spatiu, toate
valorile din intervalul [a,b] care au suma cifrelor numar impar.
Exemplu: dacă a=10, b=20, atunci se afișează 10 12 14 16 18
Limbajul Python Limbajul C/C++
#include <iostream>
def suma_cifrelor(n):
using namespace std;
return sum(int(c) for c in str(n)) int sum_Cif(int x)
a = int(input()) { int s=0;
while(x>0)
b = int(input())
{ s += x%10; x /= 10; }
for x in range(a, b + 1): return s;}
if suma_cifrelor(x) % 2 == 1: int main()
{ int a, b;
print(x, end=' ')
cin>>a>>b;
for (int i=a;i<=b;++i)
if (sum_Cif(i)%2==1)
cout<<i<<' ';
return 0;
}

19. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<9) și apoi, de pe rândul următor, separate prin spațiu, n cifre. Programul construiește
și afișează numărul format doar cu cifrele pare dintre cele n cifre, în ordinea citirii. Dacă
nu se citește nicio cifră pară se afișează mesajul nu exista. Se ignoră zerourile
nesemnificative.
Exemplu: dacă n=7, iar cifrele sunt în această ordine 3 2 1 4 6 2 9, atunci se
afișează 2462
Limbajul Python Limbajul C/C++
n = int(input()) #include <iostream>
cifre = input().split() using namespace std;
nr_format = "" int main()
{ int n;
for cifra in cifre:
cin>>n;
if int(cifra) % 2 == 0: int cif;
nr_format += cifra
bool cif1=false;
if nr_format:
bool gasit=false;
nr_int = int(nr_format)
int nr=0;
print(nr_int)
else: print("nu exista") for(int i=0;i<n;++i)
{ cin>>cif;
if(cif%2==0)
{ gasit=true;
if(!cif1 && cif==0)
continue;
cif1=true;
nr=nr*10+cif;
}
}
if(cif1 || găsit) cout<<nr;
else cout<<"nu exista";
return 0;
}

88
20. Scrieți un program Python/C++ care citește un număr natural nenul n. Programul îl
scrie pe n ca sumă de două pătrate perfecte nenule, nu neapărat distincte, iar dacă n nu
se poate descompune astfel, afișează mesajul imposibil. Dacă sunt mai multe soluții
se vor afișa toate, pe rânduri diferite.
Exemplu: dacă n=13 se afișează 13=22+32
Limbajul Python
import math
n = int(input())
gasit = False
for a in range(1, int([Link](n//2)) + 1):
b_la_2 = n - a*a
b = int([Link](b_la_2))
if b*b == b_la_2 and b != 0:
gasit = True
print(f"{n}={a}²+{b}²",end='\n')
#break
if not gasit:
print("imposibil")

Limbajul C/C++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ int n; bool gasit=false;
cin>>n;
for (int a=1;a*a<=n/2;++a)
{ int b2=n-a*a; int b=sqrt(b2);
if (b>=1 && b*b==b2) {
cout<<n<<'='<<a<<"^2+"<<b<<"^2"<<'\n'; gasit=true; } }
if (!gasit) cout<<"imposibil";
return 0;
}

21. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


(0<n<51), apoi calculează și afișează, pe ecran, ultima cifră a sumei tuturor numerelor
naturale impare, care aparțin intervalului [n,2*n]. De exemplu, dacă n=4, programul
va afișa valoarea 2 (în intervalul[4,2*4] avem 5+7=12 iar ultima cifră este 2).

Limbajul Python Limbajul C/C++


n = int(input()) #include <iostream>
using namespace std;
m = (n<<1)
int main()
n = n+(n+1)%2 { int n, m, s=0, i;
s = 0 cin>>n;
m=(n<<1);
for i in range(n, m + 1, 2): for(i=n+(n+1)%2;i<=m;i=i+2)
s=(s+(i%10))%10 s=(s+(i%10))%10;
print(s) cout<<s;
return 0;
}

89
22. Scrieți un program Python/C++ care citește două numere naturale a și b (0<a<10,
9<b<100) și care afișează, pe ecran, în ordine descrescătoare, separate prin câte un
spațiu, toate numerele naturale din intervalul [a,b], care au cifra unităților o cifră pătrat
perfect. De exemplu, pentru a=6 și b=18, se va afișa: 14 11 10 9

Limbajul Python Limbajul C/C++

a,b = map(int, input().split()) #include <iostream>


using namespace std;
s=''
int main()
for i in range(b, a-1, -1):
{ unsigned int a,b,i,c;
if str(i%10) in "0149": s=s+str(i)+' ' cin>>a>>b;
print(s) for(i=b;i>=a;i--)
{
c=i%10;
if(c<=1 || c==4 || c==9)
cout<<i<<" ";}
return 0;
}

23. Scrieți un program Python/C++ care citește două numere naturale a și b (9<a<b<100)
și care afișează, pe ecran, în ordine crescătoare, separate prin câte un spațiu, toate
numerele naturale din intervalul [a,b], care au cifra zecilor o cifră primă. Dacă nu
există niciun astfel de număr, pe ecran se afișează mesajul nu exista.
De exemplu, pentru a=12 și b=19, se va afișa: nu exista
iar pentru a=12 și b=23, se va afișa: 20 21 22 23

Limbajul Python Limbajul C/C++

a,b = map(int, input().split()) #include <iostream>


s='' using namespace std;
ok=False int main()
for i in range(a, b+1): {unsigned int a,b,i,c,ok=0;
if str(i//10) in "2357": cin>>a>>b;
s=s+str(i)+' ' for(i=a;i<=b;i++)
ok = True { c=i/10;
if ok: if (c==2||c==3||c==5||c==7)
print(s) {cout<<i<<" "; ok=1;}
else: }
if(ok==0) cout<<"nu exista";
print("nu exista")
return 0;
}

24. Scrieți un program Python/C++ care citește trei numere naturale a, b și c


(0<a<b<1000, 0<c<28) și care afișează, pe ecran, în ordine descrescătoare,
separate prin câte un spațiu, toate numerele naturale din intervalul [a,b], care au
suma cifrelor egală cu c. Dacă nu există niciun astfel de număr, pe ecran se afișează

90
mesajul nu exista.
De exemplu, pentru a=12, b=15, c=10, se va afișa: nu exista
iar pentru a=12, b=23, c=5 se va afișa: 23 14

Limbajul Python Limbajul C/C++

a,b,c = map(int, input().split()) #include <iostream>


rez='' using namespace std;
int main()
ok=False
{ int a, b, c, i, s, ok=0;
for i in range(b, a-1, -1):
cin>>a>>b>>c;
s= i%10+i//10%10+i//100
for(i=b;i>=a;i--)
if s==c:
{ s=i%10+i/10%10+i/100;
rez=rez+str(i)+' '
if(s==c)
ok=True {cout<<i<<" "; ok=1;}
if ok: }
print(rez) if (ok==0)
else: print("nu exista") cout<<"nu exista";
return 0;
}

25. Scrieți un program Python/C++ care citește un număr natural n (1<n<100) și apoi un
șir de n numere întregi distincte, având cel mult 4 cifre fiecare, separate prin enter.
Programul determină și afișează, pe ecran, diferența, în valoare absolută, dintre cele
mai mici două numere pare distincte din șir. Dacă șirul de numere nu conține cel puțin
două numere pare, programul afișează mesajul nu exista.
De exemplu, pentru n=7 și numerele din șir sunt: -9,8,1,4,-3,-4,-2 se va afișa pe
ecran valoarea: 2, fiindcă cele mai mici numere pare sunt -4 și -2, iar |-4-(-2)|=2

Limbajul Python

n = int(input("n="))
min1 = min2 = 10000
for i in range(n):
x = int(input("x="))
if x%2==0 and x<min1:
min2=min1
min1=x
elif x%2==0 and x < min2:
min2=x
if min2==10000: print("nu exista")
else:
dif= min2-min1
print(dif)

91
Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{ int n,min1=10000,min2=10000,i,x;
cin>>n;
for(i=1;i<=n;i++)
{ cin>>x;
if(x%2==0 and x<min1) {min2=min1; min1=x;}
else if(x%2==0 and x < min2)min2=x;
}
if(min2==10000)
cout<<"nu exista";
else cout<< min2-min1;
return 0;
}

26. Scrieți un program Python/C++ care citește o cifră nenulă cif și afișează, pe ecran,
un triunghi cu cifra respectivă, în formatul din exemple. De exemplu, pentru cif=4,
programul va afișa:
4
44
444
4444
iar pentru cif=2, programul va afișa:
2
22

Limbajul Python Limbajul C/C++

#include <iostream>
cif=int(input())
using namespace std;
for i in range(1, cif+1): int main()
rez='' {int cif,i,j;
cin>>cif;
for j in range(1, i+1):
for(i=1;i<=cif;i++,cout<<'\n')
rez=rez+str(cif) for(j=1;j<=i;j++)
print(rez) cout<<cif;
return 0;
}

27. Scrieți un program Python/C++ care citește un număr natural n (1<n<100) și apoi un
șir de n numere naturale, având cel puțin două și cel mult opt cifre fiecare, separate prin
enter. Programul determină și afișează, pe ecran, câte numere din șir au proprietatea
că pătratul primei cifre a unui număr este egal cu ultima cifră a acelui număr.
De exemplu, pentru n=6 și numerele din șir: 12, 224, 3009, 4902, 10, 10001
se va afișa pe ecran valoarea: 3, fiindcă 2*2=4, 3*3=9 și 1*1=1

92
Limbajul Python Limbajul C/C++
n = int(input("n=")) #include <iostream>
cate=0
using namespace std;
for i in range(n):
int main()
x = int(input("x="))
{ int n,cate=0,i,x,uc;
uc = x%10
while x>9: cin>>n;
x=x//10 for(i=1;i<=n;i++)
if uc==x*x: cate=cate+1 {cin>>x; uc=x%10;
while (x>9)x/=10;
print(cate) if(x*x==uc)cate++;
}
cout<<cate;
return 0;
}

28. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


(2<n<101), apoi calculează și afișează, pe ecran, valoarea expresiei:
3·7+4·9+5·11+...+n·(2·n+1). De exemplu, pentru n=5, se va afișa: 112.

Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>

E=0 using namespace std;

for i in range(3,n+1): int main()

E=E+i*(2*i+1) {int n,E=0,i;

print(E) cin>>n;
for(i=3;i<=n;i++) E=E+i*(2*i+1);
cout<<E;
return 0;
}

29. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


(1<n<1001), apoi calculează și afișează, pe ecran, valoarea expresiei:
2*3+3*4-4*5+...+(-1)n*n*(n+1)
De exemplu, pentru n=5, se va afișa: -16.

Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>


using namespace std;
E=0
int main()
for i in range(2,n+1): {int n,E=0,i;
cin>>n;
if i%2!=0: E=E-i*(i+1)
for(i=2;i<=n;i++)
else: E=E+i*(i+1) if(i%2)E=E-i*(i+1);
else E=E+i*(i+1);
print(E)
cout<<E;
return 0;
}

93
30. Definim un număr 4-zigzag ca fiind un număr natural format din 4 cifre, astfel: prima și
a treia cifră sunt cifre impare din {1,3,5,7,9}, iar a doua și a patra cifră sunt cifre
pare din {0,2,4,6,8}. Un exemplu de număr 4-zigzag este 9450.
Scrieți un program Python/C++ care citește de la tastatură un număr natural x, având
maxim 4 cifre, apoi afișează, pe ecran, toate numerele 4-zigzag, în ordine
descrescătoare, pe linii diferite, care sunt cel mult egale cu x.
Limbajul Python Limbajul C/C++

#include <iostream>
x=int(input())
using namespace std;
ok=0
int main()
for a in range(9,0,-2): {int x,a,b,c,d,e,ok=0;
for b in range(8,-1,-2): cin>>x;
for(a=9;a>=1;a-=2)
for c in range(9,0,-2):
for(b=8;b>=0;b-=2)
for d in range(8,-1,-2):
for(c=9;c>=1;c-=2)
e = a*1000+b*100+c*10+d for(d=8;d>=0;d-=2)
if e<x: {e=a*1000+b*100+c*10+d;
if(e<x)
print(e)
cout<<e<<endl,ok=1;
ok=1
}
if ok==0: print("nu exista") if(!ok)cout<<"nu exista";
return 0;
}

31. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


reprezentând cifrele unui cod galactic. Nava Solaris trebuie să decoleze doar dacă suma
cifrelor pare din cod este egală cu suma cifrelor impare. Programul va afișa pe ecran
mesajul DECOLARE, dacă condiția este îndeplinită, sau EROARE DE COD, în caz
contrar.
Exemplu: pentru n = 263741 → cifre pare: 2, 6, 4 → sumă 12
cifre impare: 3, 7, 1 → sumă 11 → se va afișa EROARE DE COD

Limbajul Python

n = input()
suma_pare = 0
suma_impare = 0
for cifra in n:
c = int(cifra)
if c % 2 == 0: suma_pare += c
else: suma_impare += c
if suma_pare == suma_impare: print("DECOLARE")
else: print("EROARE DE COD")

94
Limbajul C/C++

#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, copie, nr_cifre = 0;
int cifre[20], suma_pare = 0, suma_impare = 0
cout << "Introduceți codul galactic: ";
cin >> n;
copie = n;
// Extragem cifrele și le stocăm într-un vector
while (copie > 0) {
cifre[nr_cifre] = copie % 10;
copie /= 10;
nr_cifre++;
}
// Parcurgem cifrele în ordine inversă
for (int i = nr_cifre - 1; i >= 0; i--) {
if (cifre[i] % 2 == 0) suma_pare += cifre[i];
else suma_impare += cifre[i];
}
if (suma_pare == suma_impare)
cout << "DECOLARE";
else cout << "EROARE DE COD";
return 0;
}

32. Scrieți un program Python/C++ care citește de la tastatură un număr n și construiește


un model piramidal de apărare cu n nivele, afișând la fiecare nivel doar numere impare
crescătoare, astfel:
Exemplu pentru n = 3:
1
3 5
7 9 11
Limbajul Python

n = int(input("Introduceți numărul de niveluri: "))


numar = 1 # primul număr impar
for i in range(1, n + 1): # pentru fiecare nivel
for j in range(i): # numere pe fiecare rând
print(numar, end=' ')
numar += 2 # trecem la următorul număr impar
print() # trecem la rândul următor

95
Limbajul C++

#include <iostream>
using namespace std;
int main() {
int n, numar = 1;
cout << "Introduceți numărul de niveluri: ";
cin >> n;
for (int i = 1; i <= n; i++) { // pentru fiecare nivel
for (int j = 1; j <= i; j++) { // numerele de pe nivel
cout << numar << " ";
numar += 2; // trecem la următorul număr impar
}
cout << endl; // trecem la următorul rând
}
return 0;
}

33. Scrieți un program Python/C++ care citește de la tastatură un șir de n caractere


(cifre), și determină dacă cifrele parcurg un tipar crescător, descrescător sau sunt
amestecate. Programul va afișa pe ecran unul dinte mesajele: „crescător,
„descrescător” sau „neordonat”.

Exemplu: pentru n = 5, șirul 1 2 3 4 5 → crescător


pentru 5 4 3 2 1 → descrescător
pentru 1 3 2 4 5 → neordonat

Limbajul Python

n = int(input())
cifre = list(map(int, input().split()))
crescator = True
descrescator = True
for i in range(n - 1):
if cifre[i] >= cifre[i + 1]:
crescator = False
if cifre[i] <= cifre[i + 1]:
descrescator = False
if crescator:
print("crescător")
elif descrescator:
print("descrescător")
else:
print("neordonat")

96
Limbajul C/C++
#include <iostream>
using namespace std;

int main() {
int n, cifre[100];
bool crescator = true, descrescator = true;
cin >> n;
cout << "Introduceți cifrele separate prin spațiu: ";
for (int i = 0; i < n; i++) {
cin >> cifre[i];
}
for (int i = 0; i < n - 1; i++) {
if (cifre[i] >= cifre[i + 1])
crescator = false;
if (cifre[i] <= cifre[i + 1])
descrescator = false;
}

if (crescator)
cout << "crescător";
else if (descrescator)
cout << "descrescător";
else
cout << "neordonat";

return 0;
}

34. Scrieți un program Python/C++ care citește de la tastatură un număr natural n,


reprezentând intensitatea scutului unei cetăți spațiale. Pentru a activa scutul complet,
fiecare divizor propriu (exclusiv 1 și n) al valorii n trebuie multiplicat cu poziția sa în
ordinea crescătoare, iar produsul final al acestor valori trebuie afișat. Dacă n este prim,
se va afișa ACTIVARE IMPOSIBILĂ.

Limbajul Python

n = int(input())
divizori = []
produs = 1
# Căutăm divizorii proprii (exclus 1 și n)
for i in range(2, n):
if n % i == 0:
[Link](i)
if len(divizori) == 0:
print("ACTIVARE IMPOSIBILĂ")
else:
for poz, val in enumerate(divizori, start=1):
produs *= val * poz
print(produs)

97
Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n, produs = 1, contor = 0;
bool nrDivizori = false;
cin >> n;
for (int i = 2; i < n; i++) {
if (n % i == 0) {
contor++;
produs *= i * contor;
nrDivizori = true;
}
}
if (!nrDivizori) cout << "ACTIVARE IMPOSIBILĂ";
else cout << "Produsul activator: " << produs;
return 0;
}

35. Scrieți un program Python/C++ care citește de la tastatură un număr natural n,


reprezentând înălțimea turnului vrăjitorului. Pe fiecare nivel, vrăjitorul a așezat o cantitate
de magie egală cu pătratul nivelului (1², 2², ..., n²). Dacă nivelul este par, magia se
scurge, iar energia devine negativă. Calculați energia totală acumulată în turn.
Exemplu: pentru n = 4 → 1² - 2² + 3² - 4² = 1 - 4 + 9 - 16 = -10

Limbajul Python

n = int(input())
energie = 0
for i in range(1, n + 1):
if i % 2 == 0:
energie -= i * i
else:
energie += i * i
print("Energia totală acumulată:", energie)

Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n, energie = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
if (i % 2 == 0) energie -= i * i;
else energie += i * i;
}
cout << "Energia totală acumulată: " << energie;
return 0;
}

98
36. Scrieți un program Python/C++ care citește de la tastatură un număr natural n și apoi n
numere naturale, reprezentând simboluri magice gravate pe un inel antic. Inelul este
activat doar dacă fiecare simbol este media aritmetică exactă (fără rest) a celor două
simboluri vecine din stânga și din dreapta, cu așezare circulară (primul și ultimul simbol
sunt vecini).
Dacă regula este respectată pentru toate simbolurile, se va afișa: CERCUL ESTE
STABIL În caz contrar, se va afișa: SIMBOLURILE NU SUNT ECHILIBRATE.
Exemplu: Pentru n = 3 și simboluri: 4 8 4
Vecini pt 8: 4 și 4 → (4+4)/2 = 4
Vecini pt 4: 8 și 4 → (8+4)/2 = 6 ≠ 4
→ SIMBOLURILE NU SUNT ECHILIBRATE
Limbajul Python

n = int(input())
simboluri = list(map(int, input().split()))
stabil = True
for i in range(n):
st = simboluri[(i - 1) % n]
dr = simboluri[(i + 1) % n]
media = (st + dr) // 2
if (st + dr) % 2 != 0 or simboluri[i] != media:
stabil = False
break
if stabil:
print("CERCUL ESTE STABIL")
else:
print("SIMBOLURILE NU SUNT ECHILIBRATE")
Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int a[1001];
for (int i = 0; i < n; i++)
cin >> a[i];
bool stabil = true;
for (int i = 0; i < n; i++) {
int st = a[(i - 1 + n) % n];
int dr = a[(i + 1) % n];
if ((st + dr) % 2 != 0 || a[i] != (st + dr) / 2) {
stabil = false;
break;
}
}
if (stabil) cout << "CERCUL ESTE STABIL";
else cout << "SIMBOLURILE NU SUNT ECHILIBRATE";
return 0;
}

99
37. Scrieți un program Python/C++ care citește de la tastatură două numere naturale n și m.
În Templul Cifrelor, doi ucenici trebuie să rostească fiecare câte un număr sacru.
Legenda spune că dacă numerele rostite au măcar o cifră comună, se va deschide
Poarta Cunoașterii.
Ajutați păstrătorul să decidă dacă cele două numere conțin cel puțin o cifră comună.
Dacă da, afișați: ACCES PERMIS altfel, afișați: ACCES RESPINS
Exemplu: Pentru numerele: n = 247, m = 935 ⇒ ACCES RESPINS ,

Limbajul Python

n = int(input())
m = int(input())
# vectori pentru frecvența cifrelor
cifre_n = [0] * 10
cifre_m = [0] * 10
# extragem cifrele lui n
for cifra in str(n):
cifre_n[int(cifra)] = 1
# extragem cifrele lui m
for cifra in str(m):
cifre_m[int(cifra)] = 1
# verificăm dacă există cifră comună
acces = False
for i in range(10):
if cifre_n[i] and cifre_m[i]:
acces = True
break
print("ACCES PERMIS" if acces else "ACCES RESPINS")
Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int cifreN[10] = {0};
int cifreM[10] = {0};
// Extragem cifrele lui n
for (int x = n; x > 0; x /= 10)
cifreN[x % 10] = 1;
// Extragem cifrele lui m
for (int x = m; x > 0; x /= 10)
cifreM[x % 10] = 1;
// Verificăm dacă există o cifră comună
bool comun = false;
for (int i = 0; i < 10; i++) {
if (cifreN[i] && cifreM[i])
{ comun = true; break; }
}
if (comun) cout << "ACCES PERMIS";
else cout << "ACCES RESPINS";
return 0;
}

100
38. Scrieți un program Python/C++ care citește de la tastatură un număr natural n
(0<n<51), apoi calculează și afișează prima cifră a produsului tuturor numerelor pare
din intervalul [n,2*n]. Dacă nu există numere pare în acest interval, se va afișa
mesajul: „Nu există numere pare în interval.”
De exemplu, pentru n = 5, intervalul este [5,10], numerele pare sunt 6, 8, 10,
iar produsul este 6*8*10 = 480. Prima cifră este 4.

Limbajul Python Limbajul C/C++

n = int(input("Introduceți un nr n: #include <iostream>


")) using namespace std;
produs = 1
are_pare = False int main() {
for i in range(n, 2 * n + 1): int n;
if i % 2 == 0: long long prod = 1;
produs *= i bool are_pare = false;
are_pare = True cout <<"Introduceti un nr n: ";
if are_pare: cin >> n;
p_cif = int(str(produs)[0]) for(int i = n; i <= 2 * n; i++)
print("Prima cifră este:", p_cif) {
else: if (i % 2 == 0
print("Nu există numere pare") { prod*= i;
are_pare = true;
}
}
if (are_pare) {
while (prod >= 10)
prod /= 10;
cout<<"Prima cif e: "<< prod;
}
else
cout <<"Nu exista numere pare";
return 0;
}

39. Scrieți un program în Python/C++ care citește două numere naturale x și y (5 < x < 20,
20 < y < 100), și afișează, în ordine crescătoare, toate numerele pare din intervalul [x, y]
al căror număr de cifre este egal cu suma cifrelor lor modulo 2. Daca nu există nici un
numar se va afisa mesajul Nu există
De exemplu, pentru x = 12, y = 30, se va afisa mesajul Nu există

Limbajul Python Limbajul C/C++

x = int(input("Introduceți x: ")) #include <iostream>


using namespace std;
y = int(input("Introduceți y: "))
int main() {
exist=0
int x, y, cifre, suma,exist=0;
for i in range(x, y + 1): cout << "Introduceti x: ";
if i % 2 == 0: cin >> x;
suma=sum(int(c) for c in str(i)) cout << "Introduceti y: ";
cin >> y;

101
nr_cifre = len(str(i)) for (int i = x; i <= y; i++) {
if (i % 2 == 0) {
if suma % 2 == nr_cifre:
int suma =0; cop=i;
print(i, end=' ')
while(cop) {
exista = 1 suma+=n%10; cop/=10; }
if not exista: cifre=0; cop=i;
print("Nu există") while(cop) {
cifre++;
cop/=10; }
if (suma % 2 == cifre) {
cout << i << " ";
exist=1;}
}
}
if (!exista)
cout<<"Nu există";
return 0;
}

40. Scrieți un program în Python/C++ care citește două numere naturale m și n (10 ≤ m < n
≤ 99), și care afișează,pe ecran, în ordine crescătoare, separate prin câte un spațiu,
toate numerele din intervalul [m, n] care au produsul dintre cifra zecilor și cifra
unităților impar. Dacă nu există niciun astfel de număr, pe ecran se afișează mesajul
nu exista.
De exemplu, pentru a=11 și b=20, se va afișa: 11 13 15 17 19
iar pentru a=12 și b=23, se va afișa: 20 21 22 23

Limbajul Python Limbajul C/C++

m = int(input("Introduceți m: ")) #include <iostream>


using namespace std;
n = int(input("Introduceți n: "))
int main()
exista = False
{
for numar in range(m, n + 1): int m, n, zeci, unitati;
zeci = numar // 10 bool exista = false;
unitati = numar % 10 cout<<"Introduceți m :"; cin>>m;
cout<<"Introduceți n :"; cin>>n;
produs = zeci * unitati
for (int i = m; i <= n; i++) {
if produs % 2 == 1: zeci = i / 10;
print(numar, end=' ') unitati = i % 10;
exista = True if ((zeci*unitati)%2== 1)
{ cout << i << " ";
if not exista:
exista = true;
print("nu exista") }
}
if (!exista) cout<<"nu exista";
return 0;
}

102
41. Scrieți un program în Python/C++ care citește trei numere naturale p, q și s (9 < p < q <
999, 1 ≤ s ≤ 9) și afișează, pe ecran, în ordine crescătoare, separate prin câte un
spațiu, toate numerele din intervalul [p, q] care conțin exact o singură cifră egală cu s.
Dacă nu există niciun astfel de număr, pe ecran se afișează mesajul nu exista.
De exemplu, pentru p=12, q=25, s=2, se va afișa: nu exista
iar pentru p=12, q=25, s=2 se va afișa: 12 23 25

Limbajul Python Limbajul C/C++

p,q,s = map(int, input().split()) #include <iostream>


using namespace std;
exist=False
int main()
for i in range(p, q+1):
{ int p, q, s, i, s, exist=0;
aparitii =str(numar).count(str(s)) cin>>p>>q>>s;
if aparitii == 1: for(i=p;i<=q;i++)
print(numar, end=' ') { int count = 0, numar=i;
exist = True while (numar > 0) {
if not exist: if (numar % 10 == s)
print("nu exista") count++;
numar /= 10;}
if(count==1)
{cout<<i<<" "; exist=1;}
}
if (exist==0)
cout<<"nu exista";
return 0;
}

42. Scrieți un program Python/C++ care citește un număr natural n (2 ≤ n ≤ 99) și apoi un
șir de n numere întregi distincte, fiecare cu cel mult 4 [Link] va afișa, pe ecran,
cea mai mare valoare care se poate obține prin înmulțirea a două valori diferite dintre
cele citite. Dacă în șirul de numere nu există cel puțin două numere diferite, se va afișa
mesajul: nu exista
De exemplu, pentru n=4 și numerele din șir sunt: -5, 3, 7, -2, se va afișa pe
ecran valoarea: 21 (3*7)

Limbajul Python
n = int(input("Introduceți n: "))
nr1 = int(input("Introduceți primul număr: "))
nr2 = int(input("Introduceți al doilea număr: "))
max1 = nr1
max2 = nr2
if max2 > max1:
max1, max2 = max2, max1
exista_diferite = (nr1 != nr2)
for i in range(3, n + 1):
if x != max1 and x != max2:

103
exista_diferite = True
if x > max1:
max2 = max1
max1 = x
elif x > max2: max2 = x
if exista_diferite:
print("Cea mai mare valoare este:", max1 * max2)
else: print("nu exista")

Limbajul C/C++
#include <iostream>
using namespace std;
int main() {
int n, x;
cout << "Introduceti n: ";cin >> n;
int nr1, nr2;
cout << "Introduceti primul numar: "; cin >> nr1;
cout << "Introduceti al doilea numar: ";cin >> nr2;
int max1 = nr1, max2 = nr2;
if (max2 > max1) { int aux = max1; max1 = max2; max2 = aux; }
for (int i = 3; i <= n; i++) {
cin >> x;
if (x != max1 && x != max2) {
if (x > max1) {max2 = max1; max1 = x;}
else if (x > max2) { max2 = x;}
}
}
if (max1 != max2)
cout << "Cea mai mare valoare este: " << max1 * max2;
else cout << "nu exista";
return 0;
}

43. Scrieți un program în Python/C++ care citește o cifră nenulă c (1 ≤ c ≤ 9) și afișează


un triunghi numeric inversat, în care pe prima linie apar c cifre c, pe a doua linie c-1
cifre c, și așa mai departe, până la o singură cifră c.
De exemplu, pentru c=3, programul va afișa:
333
33
3

Limbajul Python Limbajul C/C++

cif=int(input()) #include <iostream>

for i in range(c, 0,-1): using namespace std;


int main()
rez=''
{int cif,i,j;
for j in range(0, i): cin>>c;
rez=rez+str(cif) for(i=c;i>=1;i--,cout<<'\n')
print(rez) for(j=0;j<i;j++) cout<<c;
return 0;
}

104
44. Scrieți un program Python/C++ care citește un număr natural n (1<n<100) și apoi un
șir de n numere naturale, având cel puțin două și cel mult patru cifre fiecare, separate
prin enter. Programul determină și afișează, pe ecran, cel mai mic număr care are prima
cifră egală cu ultima cifră. Dacă nu există niciun astfel de număr, să se afișeze mesajul:
„nu exista”.
De exemplu, pentru n=5 și numerele din șir: 1231, 2442, 458, 707, 3423, se
va afișa pe ecran valoarea: 707

Limbajul Python Limbajul C/C++

n = int(input("Introduceți n")) #include <iostream>


mini=0
using namespace std;
for i in range(1,n):
int main() {
x = int(input("x="))
uc = x%10 int n, x, minim = -1;
while x>9: cin >> n;
x=x//10 for (int i = 0; i < n; i++) {
if uc==x: cin >> x;
if minim==0 or x<mini: int ultima = x % 10;
while (x >= 10) x /= 10;
mini=x
int prima = x;
if mini!=0: if (prima == ultima) {
print(mini) if (minim == -1 || x < minim)
minim = x; }
else: }
print("nu exista") if (minim != -1) cout << minim;
else cout << "nu exista";
return 0; }

45. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(2<n<101). Programul determină și afișează, pe ecran, suma pătratelor primelor n
numere impare.
De exemplu, pentru n=3, se va afișa: 35(1+9+25).

Limbajul Python Limbajul C/C++

n = int(input("Introduceți n: ")) #include <iostream>


using namespace std;
suma = 0
int main() {
for i in range(1,n):
int n, sumanr_impar;
numar_impar = 2 * i + 1 cout << "Introduceți n: ";
suma += numar_impar ** 2 cin >> n;
print("Suma pătratelor este:", suma = 0;
suma) for (int i = 0; i < n; i++) {
int nr_impar = 2 * i + 1;
suma +=nr_impar* nr_impar;
}
cout << "Suma pătratelor este: "
<< suma;
return 0; }

105
46. Scrieți un program Python/C++ care citește un număr natural n (1<n<100) și apoi un
șir de n numere naturale, având cel puțin două și cel mult patru cifre fiecare, separate
prin [Link] determină și afișează, pe ecran, suma celor care au exact trei
cifre.
De exemplu, pentru n=5 și numerele din șir: 45 123 999 1003 300, se va afișa:
1422.

Limbajul Python Limbajul C/C++

n=int(input("Introduceți nr n: ")) #include <iostream>


using namespace std;
suma = 0
int main() {
for i in range(0,n):
int n, x, suma = 0;
x = int(input()) cout << "Introduceți numărul n: ";
if 100 <= x <= 999: cin >> n;
suma += x for (int i = 0; i < n; i++) {
cin >> x;
print("Suma nr este:", suma)
if (x >= 100 && x <= 999)
suma += x;
}
cout << "Suma nr este: " << suma;
return 0;
}

47. Scrieți un program Python/C++ care citește de la tastatură un număr natural n și d și


apoi un șir de n numere naturale, având cel puțin două și cel mult patru cifre fiecare.
Programul determină și afișează, pe ecran, produsul tuturor numerelor pare dintre cele
n citite și câte dintre aceste numere au ultima cifră egală cu d.
De exemplu, pentru n=6 și d=4 și numerele din șir: 12 23 34 40 15 4 se va afișa:
65280 ( 12*34*40*4) și : Nr pare cu cifra unitatilor 4 = 2

Limbajul Python
n = int(input("Introduceți n: "))
d = int(input("Introduceți d: "))
prod_pare = 1
count_d = 0
are_pare = False
for i in range(0,n):
x = int(input())
if x % 2 == 0:
prod_pare *= x
are_pare = True
if x % 10 == d:
count_d += 1
if are_pare: print("Produsul nr pare este:", prod_pare)
else: print("Nu există numere pare.")
print(f"Nr pare cu cifra unitatilor {d}: {count_d}")

106
Limbajul C/C++
#include <iostream>
using namespace std;
int main() {
int n, d, x, are_pare=0, prod=1, count=0;
cout << "Introduceți n și d: ";
cin >> n >> d;
for (int i = 0; i < n; i++) {
cin >> x;
if (x % 2 == 0) {
prod*= x; are_pare = 1;
if (x % 10 == d) count++;
} }
if (are_pare)
cout << "Produsul numerelor pare este: " << prod<< endl;
else cout << "Nu există numere pare." << endl;
cout << " Nr pare cu cifra unitatilor " << d << ": " << count;
return 0;
}

48. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


(n<10000000) și determină suma tuturor numerelor naturale echilibrate (un număr
este echilibrat dacă are proprietatea că prima cifră a numărului este egală cu ultima
cifră a numărului) mai mici sau egale cu cu n. Programul afișează pe ecran suma
determinată. De exemplu, pentru n=17, programul va afișa valoarea 56
(=1+2+3+...+9+11).

Limbajul Python Limbajul C/C++


n = int(input()) #include <iostream>
S = 0 using namespace std;
for i in range(1, n + 1): int main()
{ int n,S=0,i,x;
if i < 10: S += i
cin>>n;
else: for(i=1;i<=n;i++)
x = i if(i<10)S=S+i;
while x>9: else
x=x//10 {x=i;
while(x>9) x=x/10;
if x==i%10:
if(x==i%10) S=S+i; }
S += i cout<<S;
print(S) return 0;
}

49. Scrieți un program Python/C++ care să citească două numere naturale a și b


(10<a<b<10000) și care să afișeze pe ecran, în ordine crescătoare, separate prin
câte un spațiu, toate numerele naturale pare din intervalul [a,b] care au cifra
unităților cu exact două unități mai mare decât cifra zecilor sau mesajul nu exista, în
cazul în care în intervalul dat nu avem astfel de numere. De exemplu, pentru a=10 și
b=101, programul va afișa, pe o linie a ecranului: 24 46 68.

107
Limbajul Python Limbajul C/C++

a,b = map(int, input().split()) #include <iostream>


using namespace std;
ok=0
int main()
if a%2==1: a=a+1
{ int a,b,c,ok=0;
if b%2==1: b=b-1 cin>>a>>b;
for c in range(a, b + 1): if(a%2==1) a++;
if(b%2==1) b--;
if c//10%10+2==c%10 and
c%2==0: for(c=a;c<=b;c++)
if(c/10%10+2==c%10
print(c, " ") && c%2==0)
ok=1 {cout<<c<<" ";ok=1;}
if ok==0: if(ok==0) cout<<"nu exista";
print("nu exista") return 0;
}

50. Scrieți un program Python/C++ care să citească un număr natural k(k<20) și să


afișeze pe ecran primele i! numere, afișarea se face respectând formatul din
exemplu. De exemplu, pentru k=3, programul va afișa:
0!=1
1!=1
2!=2
3!=6.

Limbajul Python Limbajul C/C++

#include <iostream>
k=int(input())
using namespace std;
p=1
int main()
print(0,'!=',p) {long long k,c,p=1;
for c in range(1, k+1): cin>>k;
cout<<0<<"!="<<1<<endl;
p=p*c
for(c=1;c<=k;c++)
print(c,'!=',p)
{ p=p*c;
cout<<c<<"!="<<p<<endl;
}
return 0;
}

51. Scrieți un program Python/C++ care să citească două numere naturale nenule n și k
(n,k<10000). Programul determină și afișează pe ecran cifra de control a numărului
n*10k.
De exemplu, pentru n=123 și k=5, programul va afișa 6 (deoarece
1+2+3+0+0+0+0+0=6 este o cifră, prin urmare cifra de cotrol tot 6), iar pentru
n=1234 și k=5, programul va afișa 1 ( deoarece 1+2+3+4+0+0+0+0+0=10 nu este o
cifră, se calculeaza suma cifrelor noului număr 10, prin urmare cifra de cotrol este 1,
pentru că 1+0=1).

108
Limbajul Python Limbajul C/C++
#include <iostream>
n,k=map(int,input().split())
using namespace std;
s=0 int main()
{ int n,k,i,s=0;
for i in range(1, 5):
cin>>n>>k;
s=s+n%10 for(i=1;i<=4;i++)
{ s=s+n%10; n=n/10;}
n=n//10
if(s%9==0) cout<<9;
if s%9==0: print(9) else cout<<s%9;
return 0;
else: print (s%9)
}

52. Scrieți un program Python/C++ care citește un număr natural cu exact 9 cifre.
Programul determină și afișează pe ecran toate prefixele numărului, apoi toate
prefixele numărului, ca în exemplu
De exemplu, pentru n=123456789, programul va afișa
123456789
12345678
1234567
123456
12345
1234
123
12
1
1
12
123
1234
12345
123456
1234567
12345678
123456789

Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>


using namespace std;
c=n
int main()
p=100000000 { int n,k,i,c,p=100000000;
for i in range(1, 10): cin>>n;
print(n) c=n;
for(i=1;i<=9;i++)
n=n//10 { cout<<n<<endl; n=n/10; }
for i in range(1, 10):
print(c//p) for(i=1;i<=9;i++)
p=p//10 { cout<<c/p<<endl; p=p/10; }
return 0;
}

109
V. Șiruri de caractere

1. Se consideră secvența Python alăturată. Scrieți ce se va afișa s = "Examen"


în urma executării secvenței. print(s[3])
print(s[2:5])
print(s[ :3])
print(s[2: ])
print(s[ : ])

2. Se consideră secvența Python alăturată. Scrieți ce a = "Culegere"


conținut au variabilele s și t în urma executării b = "Informatica"
secvenței. s=a+b
t=a+' de ' +b

3. Se consideră secvența Python alăturată. Scrieți ce se va afișa în a = "Foarte*"


urma executării secvenței. b = "BINE"
c=2*a+b
print(c)

4. Știind că s='VacantaDeVara', ce valoare i se va atribui variabilei t în urma executării


comenzii Python: t= ('x' in s) and ('D' in s) and ('DeV' in s)

a. xDDeV b. True c. False d. DDev

5. Pentru fiecare secvență Python din prima linie a tabelului de mai jos, asociați valoarea
afișată în urma executării corespunzătoare din a doua coloană, trasând o linie între cele
două valori.
a = "Unu doi trei si patru"
x = [Link]() 102
print(x)

b = "Unu, doi, trei și patru"


x = [Link](", ") ['unu', 'doi', 'trei@patru']
print(x)

a="unu@doi@trei@patru"
x = [Link]("@") ['unu', 'doi', 'trei', 'patru']
print(x)

a="unu@doi@trei@patru"
x = [Link]("@",2) ['Unu', 'doi', 'trei și patru']
print(x)

s = "12 34 56"
x = [Link]()
y = int(x[0])
['Unu', 'doi', 'trei', 'si', 'patru']
z = int(x[1])
w = int(x[2])
print(y+z+w)

110
6. Scrieți un program Python/C++ care citește de la tastatură un șir format din cel mult
100 de caractere, doar litere mici ale alfabetului englez. Programul modifică șirul
înlocuind fiecare vocală din șir cu litera mare corespunzătoare.
Se consideră vocale literele: ’a’,’e’,’i’, o’,’u’.
De exemplu, dacă se citește șirul septembrie , programul va afișa șirul sEptEmbrIE

Limbajul Python Limbajul C/C++

s=input() #include <iostream>


#include <cstring>
t=""
using namespace std;
v="aeiou" int main()
for i in range(len(s)): {
if s[i] in v: char s[101];
char voc[]="aeiou";
t=t+s[i].upper()
int i;
else: [Link](s,101);
t=t+s[i] for(i=0; i<strlen(s);i++)
s=t if(strchr(voc, s[i]))
s[i]=toupper(s[i]);
print(s)
cout<<s;
return 0;
}

7. Scrieți un program Python/C++ care citește de la tastatură un text format din cel mult
100 de caractere, doar litere ale alfabetului englez și spații. Programul determină
numărul vocalelor încadrate de consoane din text. Se consideră vocale literele:
’a’,’e’,’i’, o’,’u’.
De exemplu, pentru textul citit : cartile sunt frumoase programul va afișa: 5.
(car, til, sun, rum, moa)

Limbajul Python
s=input()
v="aeiou"
k = 0
for i in range(1,len(s)-1):
if s[i] in v:
if s[i-1] not in v and s[i-1]!=' ' :
if s[i+1] not in v and s[i+1]!=' ':
k+=1
print (k)

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
int main()
{ char s[101], voc[]="aeiou";
int i,k=0;
[Link](s,101);
for(i=1; i<strlen(s)-1;i++)
if( strchr(voc, s[i]) && !strchr(voc,s[i-1]) && s[i-1]!=' ' &&
!strchr(voc,s[i+1]) && s[i+1]!=' ') k++;
cout<<k;
return 0;
}

111
8. Scrieți un program Python/C++ care citește de la tastatură un text format din cel mult
100 de caractere, doar litere ale alfabetului englez, cifre și spații. Programul determină
și afișează pe ecran suma tuturor cifrelor din text.
De exemplu, pentru textul citit : ana are 1 mar 2 caise 3 prune si 3 nuci
programul va afișa 9.

Limbajul Python Limbajul C/C++

s=input() #include <iostream>


#include <cstring>
cif="0123456789"
using namespace std;
Sum = 0 int main()
for i in range(0,len(s)): {
if s[i] in cif: char s[101];
char cif[]="0123456789";
Sum=Sum+int(s[i])
int Sum = 0, i;
print (Sum) [Link](s,101);
for(i=0; i<strlen(s);i++)
if(strchr(cif, s[i]))
Sum=Sum+s[i]-'0';
cout<<Sum;
return 0;
}

9. Scrieți un program Python/C++ care citește de la tastatură un text format din cel mult
100 de caractere, doar litere ale alfabetului englez, cifre pare și spații. Programul
modifică textul, înlocuind fiecare cifră cu cuvântul corespunzător (0-zero, 2-doi, 4-
patru, 6-sase, 8-opt). Programul afișează pe ecran textul modificat.
De exemplu, pentru textul citit: ana are 2 mere 4 caise 6 prune și 8 nuci
programul va afișa:
ana are doi mere patru caise sase prune și opt nuci.

Limbajul Python
s=input()
c2="doi"
c4="patru"
c6="sase"
c8="opt"
cif="2468"
t=""
for i in range(0,len(s)):
if s[i] in cif:
if s[i]=='2': t+=c2
else:
if s[i]=='4': t+=c4
else:
if s[i]=='6': t+=c6
else: t+=c8
else: t+=s[i]
s=t
print (s)

Limbajul C/C++
#include <iostream>
#include <cstring>

112
using namespace std;
int main()
{ char s[101], t[101]="";
char cif[]="2468";
int i,k;
[Link](s,101);
for(i=0; i<strlen(s);i++)
if(strchr(cif, s[i]))
switch (s[i])
{ case '2': strcat(t,"doi");break;
case '4': strcat(t,"patru");break;
case '6': strcat(t,"sase");break;
case '8': strcat(t,"opt");break;
}
else { k=strlen(t);
t[k++]=s[i];
t[k]='\0';
}
strcpy(s,t);
cout<<s;
return 0;
}

10. Scrieți un program Python/C++ care citește de la tastatură un text format din cuvinte
separate prin spații. Textul conține cel mult 100 de caractere, iar cuvintele sunt formate
doar din litere mici ale alfabetului englez. Programul modifică textul, ștergând ultima
literă a fiecărui cuvântul care se termină cu o consoană. Programul afișează pe ecran
textul modificat.
De exemplu, pentru textul citit: ana are un caiet si un pix
programul va afișa: ana are u caie si u pi

Limbajul Python Limbajul C/C++


s=input() #include <iostream>
t="" #include <cstring>
svoc=" aeiou" using namespace std;
for i in range(0,len(s)-1): int main()
if s[i] not in svoc: {
if s[i+1]!=' ': t=t+s[i] char s[101], t[101];
else: t=t+s[i] char svoc[]=" aeiou";
s=t int i,k=0;
print (s) [Link](s,101);
for(i=0; i<strlen(s)-1;i++)
if(strchr(svoc, s[i])==NULL)
{if( s[i+1]!=' ')t[k++]=s[i];}
else t[k++]=s[i];
t[k]='\0';strcpy(s,t);
cout<<s;
return 0;
}

11. Scrieți un program Python/C++ care citește de la tastatură două cuvinte, formate din cel
mult 50 caractere doar litere ale alfabetui englez, și afișează pe ecran mesajul DA dacă
acestea sunt anagrame. În caz contrar, va afișa mesajul NU.
De exemplu, dacă se citesc cuvintele abcbfde și bdfcabe programul va afișa mesajul
DA, iar pentru abca și abcd va afișa mesajul NU.

113
Limbajul Python Limbajul C/C++

a=input() #include <iostream>


b=input() #include <algorithm>
a_sort = ''.join(sorted(a))
#include <cstring>
b_sort = ''.join(sorted(b))
if a_sort==b_sort: using namespace std;
print("DA") int main()
else : print("NU") {
char a[51], b[51];
cin>>a>>b;
sort(a,a+strlen(a));
sort(b,b+strlen(b));
if(strcmp(a,b)==0) cout<<"DA";
else cout<<"NU";
return 0;
}

12. Scrieți un program Python/C++ care citește de la tastatură un șir de cel mult 100 de
caractere, litere mici ale alfabetului englez și care afișează pe ecran, pe același rând,
separate prin câte un spațiu, vocalele distincte apărute în șir, în ordine alfabetică.
Exemplu: pentru șirul invat python se afișează a i o

Limbajul Python Limbajul C/C++

sir = input() #include <iostream>


vocale = {'a', 'e', 'i', 'o', 'u'} #include <cstring>
vocale_gasite = set() using namespace std;
for caracter in sir:
int main()
if caracter in vocale:
{
vocale_gasite.add(caracter)
char text[101];
for vocala in sorted(vocale_gasite):
print(vocala, end=' ') char vocale[]="aeiou";
bool aparitii[5]={false};
[Link](text,101);
for(int i=0; i<5;i++)
if(strchr(text, vocale[i]))
aparitii[i]=true;
for (int i=0;i<5;i++)
if (aparitii[i])
cout<<vocale[i]<<' ';
return 0;
}

13. Scrieți un program Python/C++ care citește de la tastatură un șir de cel mult 100 de
caractere, litere mici ale alfabetului englez și spații și care afișează pe ecran pe rânduri
diferite, vocalele apărute în șir, în ordine alfabetică, pentru fiecare vocală afișându-se
numărul de apariții, ca în exemplu.

114
Exemplu: pentru textul invat python ca sa fiu destept se afișează:
a: 3
e: 2
i: 2
o: 1
u: 1

Limbajul Python
sir = input()
voc = ['a', 'e', 'i', 'o', 'u']
frecventa = {vocala: 0 for vocala in voc}
for caracter in sir:
if caracter in frecventa:
frecventa[caracter] += 1
for vocala in voc:
if frecventa[vocala] > 0:
print(f"{vocala}: {frecventa[vocala]}")

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
int main()
{ char text[101];
int frecv[256]={0};
[Link](text,101);
for (int i=0;text[i];i++)
{
char ch = text[i];
if (ch>='a' && ch<='z') frecv[(int)ch]++;
}
char voc[]="aeiou";
for (int i=0;i<5;i++)
{
char v = voc[i];
if (frecv[(int)v]>0)
{cout<<v<<" ";
cout<<frecv[(int)v]<<'\n';}
}
return 0;
}

14. Scrieți un program Python/C++ care citește de la tastatură un șir de cel mult 100 de
caractere, litere mici ale alfabetului englez și spații și care afișează pe ecran, textul
obținut în urma înlocuirii fiecărei consoane cu vocala imediat dinaintea ei în alfabet și a
fiecărei vocale cu litera imediat următoare în alfabet.
Exemplu: pentru textul eu invat python se afișează fv jiubo ouoepi

115
Limbajul Python
vocale = {'a', 'e', 'i', 'o', 'u'}

# Funcție pentru înlocuire


def transforma(caracter):
if caracter in vocale:
return chr(ord(caracter) + 1)
elif 'a' <= caracter <= 'z':
for i in range(ord(caracter) - 1, ord('a') - 1, -1):
if chr(i) in vocale:
return chr(i)
return caracter
else:
return caracter

sir = input()
sir_nou = ''.join(transforma(c) for c in sir[:100])
print(sir_nou)

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
bool Vocala(char ch)
{ if(strchr("aeiou",ch)) return 1;
return 0;
}
char vocalaDinainte(char ch)
{
for (char c=ch-1;c>='a';c--)
if (Vocala(c))
return c;
return ch;
}
int main()
{
char text[101];
[Link](text, 101);
for (int i=0;text[i];++i)
{
char ch=text[i];
if (ch==' ')
cout<<" ";
else if(Vocala(ch))
{
if(ch=='u') cout<<'v';
else
cout<<char(ch+1);
}
else
cout<<vocalaDinainte(ch);
}
cout<<'\n';
return 0;
}

116
15. Scrieți un program Python/C++ care citește de la tastatură un șir de cel mult 100 de
caractere, litere mari și mici ale alfabetului englez și spații și care afișează pe ecran
textul obținut în urma înlocuirii fiecărei litere mari cu litera mică corespunzătoare ei și
fiecare literă mică cu litera mare corespunzătoare ei.
Exemplu: dacă șirul este InvAT pYthON se va afișa iNVat PyTHon

Limbajul Python

sir = input()
sir_transformat = ''
for caracter in sir:
if [Link]():
sir_transformat += [Link]()
elif [Link]():
sir_transformat += [Link]()
else:
sir_transformat += caracter
print(sir_transformat)

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
char sir[101];
int main()
{
[Link](sir,101);
for (int i=0; sir[i]; ++i)
if (isupper(sir[i]))
sir[i]=tolower(sir[i]);
else if (islower(sir[i]))
sir[i]=toupper(sir[i]);
cout<<sir <<'\n';
return 0;
}

16. Scrieți un program Python/C++ care citește de la tastatură un text de cel mult 200 de
caractere, litere mici ale alfabetului englez și spații și care afișează pe ecran cuvintele,
separate printr-un spațiu, care încep și se termină cu aceeași literă.
Exemplu: dacă textul citit este
ana si dana sunt eleve de o nota buna
se afișează: ana eleve o
Limbajul Python

text = input()
cuvinte = [Link]()
rezultat = [cuvant for cuvant in cuvinte if cuvant[0] == cuvant[-1]]
print(" ".join(rezultat)

117
Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
bool litere(const char* cuv)
{ int lg=strlen(cuv);
if (lg==0) return false;
return cuv[0]==cuv[lg-1];
}
int main()
{ char text[201];
[Link](text, 201);
char* cuv=strtok(text," ");
bool prima=true;

while (cuv!=NULL)
{ if (litere(cuv))
{ if (!prima)cout<<" ";
cout<<cuv;
prima=false;
}
cuv=strtok(NULL," ");
}
cout<<'\n';
return 0;
}

17. Scrieți un program Python/C++ care citește de la tastatură un text de cel mult 200 de
caractere, litere mici ale alfabetului englez și spații și care afișează pe ecran cuvintele,
separate printr-un spațiu, care conțin o singură vocală, indiferent de numărul de apariții
ale acesteia.
De exemplu, pentru textul: dana si costel au folos si noroc la plaja
se afisează dana si folos si noroc la plaja

Limbajul Python

vocale = {'a', 'e', 'i', 'o', 'u'}


text = input()
cuvinte = [Link]()
rezultat = []
for cuvant in cuvinte:
vocale_gasite = set([litera for litera in cuvant if litera in vocale])
if len(vocale_gasite) == 1:
[Link](cuvant)
print(" ".join(rezultat))

Limbajul C/C++
#include <iostream>
#include <cstring>
#include <set>
using namespace std;
bool esteVocala(char ch)
{
if(strchr("aeiou",ch)) return 1;
return 0;
}

118
bool oSinguraVocala(const char* cuv)
{
set<char> vocale;
for (int i=0;cuv[i];i++)
if (esteVocala(cuv[i]))
{ [Link](cuv[i]);
if ([Link]()>1) return false;
}
return ![Link]();
}
int main()
{ char text[201];
[Link](text,201);
char* cuv=strtok(text," ");
bool prima=true;
while (cuv!=NULL)
{ if (oSinguraVocala(cuv))
{ if (!prima)cout<<" "; cout<<cuv;
prima=false; }
cuv=strtok(NULL," ");
}
cout<<'\n';
return 0; }

18. Scrieți un program Python/C++ care citește de la tastatură un text de cel mult 200 de
caractere, litere mici ale alfabetului englez și spații și care afișează pe ecran textul
obținut după înlocuirea fiecărui cuvânt cu număr par de litere cu un cuvânt obținut din
acesta format doar din primele două litere ale acestuia. Cuvintele sunt separate printr-un
singur spațiu.
De exemplu, pentru textul invat python si rezolv multe probleme
se afisează: invat py si re multe pr

Limbajul Python

text = input()
cuvinte = [Link]()
rezultat = []
for cuvant in cuvinte:
if len(cuvant) % 2 == 0:
[Link](cuvant[:2])
else:
[Link](cuvant)
print(" ".join(rezultat))

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
void prelCuv(char* cuv)
{
int len=strlen(cuv);
if (len %2==0 && len>=2)
cuv[2]='\0';
}

119
int main()
{ char text[201];
[Link](text,201);
char* cuv=strtok(text," ");
bool prima=true;
while (cuv!=NULL)
{ prelCuv(cuv);
if (!prima) cout<<" ";
cout<<cuv;
prima=false;
cuv=strtok(NULL, " ");
}
cout<<'\n';
return 0;
}

19. Scrieți un program Python/C++ care citește de la tastatură un text de cel mult 200 de
caractere, litere mici ale alfabetului englez și spații și care afișează pe ecran textul
obținut după eliminarea din fiecare cuvânt cu cel putin trei litere a literelor aflate pe
poziție pară (a doua literă, a patra literă, ș.a.m.d). Cuvintele sunt separate printr-un
singur spațiu.
De exemplu, pentru textul un copil care invata multe lucruri este destept
Se afișează: un cpl cr ivt mle lcui et dset
Limbajul Python

text = input()
cuvinte = [Link]()
rezultat = []
for cuv in cuvinte:
if len(cuv) >= 3:
cuv_nou=''.join(cuv[i] for i in range(len(cuv)) if i%2 == 0)
[Link](cuv_nou)
else:
[Link](cuv)
print(" ".join(rezultat))

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
void eliminaPozitiiPare(char* cuv)
{
int len=strlen(cuv), j=0;
if (len<3) return;
for (int i=0;i<len;++i)
if (i%2==0)cuv[j++]=cuv[i];
cuv[j]='\0';
}

120
int main()
{ char text[201];
[Link](text,201);
char* cuv=strtok(text," ");
bool prima=true;
while (cuv!=NULL)
{ eliminaPozitiiPare(cuv);
if(!prima) cout<<" "; cout<<cuv;
prima=false;
cuv=strtok(NULL," "); }
cout<<'\n';
return 0;
}

20. Scrieți un program Python/C++ care citește de la tastatură un text de cel mult 200 de
caractere, litere mici ale alfabetului englez și spații și care afișează pe ecran textul
obținut după răsturnarea cuvintelor care conțin litera a. Cuvintele sunt separate printr-un
singur spațiu.
De exemplu, pentru textul limbajul python este interesant
Se afișează lujabmil python este tnaseretni

Limbajul Python
text = input()
cuvinte = [Link]()
rezultat = []
for cuv in cuvinte:
if 'a' in cuv:
[Link](cuv[::-1]) # răstoarnă cuvântul
else:
[Link](cuv)
print(" ".join(rezultat))

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
bool contineLiteraA(const char* cuv)
{ for (int i=0;cuv[i];i++)
if (cuv[i]=='a')return true;
return false;
}
void rastoarnaCuvant(char* cuv)
{
int st=0,dr=strlen(cuv)-1;
while (st < dr)
{ char temp=cuv[st]; cuv[st]=cuv[dr]; cuv[dr]=temp;
st++; dr--;
}
}
int main()
{ char text[201];
[Link](text, 201);

121
char* cuv=strtok(text," ");
bool prima=true;
while (cuv!=NULL)
{ if (contineLiteraA(cuv)) rastoarnaCuvant(cuv);
if (!prima)cout<<" ";
cout<<cuv;
prima=false; cuv=strtok(NULL," ");
}
cout <<'\n';
return 0;
}

21. Scrieți un program Python/C++ care citește de la tastatură un text de cel mult 100 de
caractere, litere mici ale alfabetului englez, spații și cifre și care afișează pe ecran, pe
linii separate, fiecare literă în ordine alfabetică și frecvența ei de apariție și apoi fiecare
cifră și frecvența ei de apariție, ca în exemplu. Se vor afișa doar literele și cifrele care
apar. De exemplu, pentru textul:
un elev bun ia 10 altul ia 2 de 7 si altul 4 de 2
se afișează:
a 4
b 1
d 2
e 4
i 3
l 5
n 2
s 1
t 2
u 4
v 1
0 1
1 1
2 2
4 1
7 1
Limbajul Python
from collections import Counter
text = input()
freq = Counter(text)
litere = {ch: cnt for ch, cnt in [Link]() if [Link]()}
cifre = {ch: cnt for ch, cnt in [Link]() if [Link]()}
for litera in sorted(litere):
print(f"{litera} {litere[litera]}")
for cifra in sorted(cifre):
print(f"{cifra} {cifre[cifra]}")

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
int main()
{ char text[101];
int frec_litere[26]={0}, frec_cifre[10]={0};
[Link](text, 101);
for (int i=0;text[i]!='\0';++i)
{ if (text[i]>='a' && text[i]<='z') frec_litere[text[i]-'a']++;
else if (text[i]>='0' && text[i]<='9')
frec_cifre[text[i]-'0']++; }

122
for (int i=0;i<26;++i)
if (frec_litere[i]>0)cout<<char('a'+i)<<" "<<frec_litere[i]<<'\n';
for (int i=0;i<10;++i)
if (frec_cifre[i] > 0) cout<<i<<" "<< frec_cifre[i]<<'\n';
return 0;
}

22. Scrieți un program Python/C++ care citește de la tastatură un text format din litere mari
și mici ale alfabetului englez, cifre, spații și semne de punctuație (cel mult 256 de
caractere). Programul, considerând literele mari ca fiind identice cu cele mici, va
determina consoana care apare de cele mai multe ori în text. Dacă există mai multe
consoane cu același număr maxim de apariții, programul va afișa pe ecran prima
consoană în ordine alfabetică.
Exemplu: Pentru textul introdus: "Programarea în C++ este captivantă!"
programul va afișa: c

Limbajul Python

text = input("Introduceți textul: ")


text = [Link]()
frecv = [0] * 26
for ch in text:
if [Link]() and ch not in 'aeiou':
index = ord(ch) - ord('a')
frecv[index] += 1
maxim = max(frecv)
# Căutăm prima consoană în ordine alfabetică cu frecvență maximă
for i in range(26):
if frecv[i] == maxim:
litera = chr(i + ord('a'))
break
print("Consoana cu cele mai multe apariții:", litera)
Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char text[256];
[Link](text, 256);
int frecv[26] = {0};
for (int i = 0; text[i]; i++) {
char ch = tolower(text[i]);
if (isalpha(ch) && !(ch == 'a' || ch == 'e' || ch == 'i'
|| ch == 'o' || ch == 'u')) frecv[ch - 'a']++;}
}
int maxim = 0;
for (int i = 0; i < 26; i++) {
if (frecv[i] > maxim) maxim = frecv[i];
}
for (int i = 0; i < 26; i++) {
if (frecv[i] == maxim) {
cout << "Consoana cu cele mai multe apariții: ";
cout << char('a' + i) << endl; break; }
}
return 0;
}

123
23. Scrieți un program Python/C++ care citește un cuvânt (format din maxim 256 de
caractere) și verifică dacă poate deveni palindrom prin eliminarea unui singur caracter,
situație în care programul va afișa pe ecran mesajul DA, altfel NU. Cuvântul citit este
format din cel mult 256 de caractere, doar litere mici ale alfabetului englez.
Exemplu: dacă se citește cuvântul radar, programul va afișa mesajul DA , iar pentru
cuvântul tacobell, va afișa NU

. Limbajul Python
def este_palindrom(s):
return s == s[::-1]

def poate_deveni_palindrom(cuvant):
for i in range(len(cuvant)):
nou = cuvant[:i] + cuvant[i+1:]
if este_palindrom(nou):
return True
return False

cuvant = input("Introduceți cuvântul: ").lower()


print("DA" if poate_deveni_palindrom(cuvant) else "NU")

Limbajul C++
#include <iostream>
#include <cstring>
using namespace std;
bool este_palindrom_fara(char s[], int n, int skip) {
int i = 0, j = n - 1;
while (i < j) {
if (i == skip) i++;
// Sărim peste caracterul de eliminat
if (j == skip) j--;
if (i < j && s[i] != s[j]) return false;
i++; j--;
}
return true;
}

int main() {
char cuv[256];
cin >> cuv;
int n = strlen(cuv);

for (int i = 0; i < n; i++) {


// Încercăm să eliminăm fiecare caracter pe rând
if (este_palindrom_fara(cuv, n, i)) {
cout << "DA\n";
return 0;
}
}
cout << "NU\n";
return 0; }

124
24. Scrieți un program Python/C++ care citește o propoziție, apoi modifică propoziția prin
inlocuirea tuturor spațiilor cu caracterul ‘_’, iar literele mici sunt transformate în
majuscule. Programul va afișa pe ecran propoziția modificată. Propoziția citită este
formată din cel mult 256 de caractere, doar litere mici ale alfabetului englez și spații.
Exemplu: pentru propoziția "salut lume" , programul va afișa SALUT_LUME
Limbajul Python
text = input()
rezultat = ""
for ch in text:
if ch == ' ':
rezultat += '_'
else:
rezultat += [Link]()

print(rezultat)

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char text[256];
[Link](text, 256);
for (int i = 0; text[i] != '\0'; i++) {
if (text[i] == ' ') cout << "_";
else cout << (char)toupper(text[i]);
}
cout << endl;
return 0;
}

25. Scrieți un program Python/C++ care citește o propoziție reprezentând parola magică
rostită de un spiriduș păzitor. Pentru a o descifra, programul trebuie să construiască un
nou șir format doar din prima literă a fiecărui cuvânt din propoziție, transformate în
majuscule și să afișeze pe ecran noul șir. Propoziția citită este formată din cel mult 256
de caractere, doar litere mici ale alfabetului englez și spații.
Exemplu: pentru textul "pădurea de argint" se va afișa PDA

Limbajul Python

text = input()
text = [Link]()
# Construim rezultatul
parola = ""
cuvinte = [Link]()
for cuv in cuvinte:
if cuv: # verificăm dacă cuvântul nu e gol
parola += cuv[0].upper()
print(parola)

125
Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;

int main() {
char text[256];
[Link](text, 256);
bool inceput_cuvant = true;
for (int i = 0; text[i]; i++) {
if (text[i] == ' ') {
inceput_cuvant = true;
} else if (inceput_cuvant) {
cout << (char)toupper(text[i]);
inceput_cuvant = false;
}
}
cout << endl;
return 0;
}

26. Scrieți un program Python/C++ care citește un cuvânt rostit de un erou în fața oglinzii
de cristal. Oglinda creează un cuvânt nou format din cuvântul inițial urmat de forma sa
inversă. Programul construiește noul cuvânt și îl afișează pe ecran. Cuvântul citit este
format din cel mult 100 de caractere, doar litere mici ale alfabetului englez.
Exemplu: pentru cuvântul citit foc, programul va afișa cuvântul foccof

Limbajul Python

cuvant = input("Introduceți cuvântul: ")


# Inversare manuală
invers = ""
for i in range(len(cuvant) - 1, -1, -1):
invers += cuvant[i]
# Concatenăm cuvântul original cu inversul
rezultat = cuvant + invers
print(rezultat)

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
int main() {
char cuv[101], rezultat[201];
cin >> cuv;
int n = strlen(cuv);
// Copiem cuvântul inițial
strcpy(rezultat, cuv);
// Adăugăm forma inversă
for (int i = n - 1; i >= 0; i--)
rezultat[n + (n - 1 - i)] = cuv[i];

126
rezultat[2 * n] = '\0'; // terminator de șir
cout << rezultat << endl;
return 0;
}

27. Scrieți un program Python/C++ care citește o propoziție din jurnalul unui magician și
calculează și afișează pe ecran câte dintre cuvinte încep cu o consoană și câte cu o
vocală. Propoziția citită este formată din cel mult 256 de caractere, doar litere mici ale
alfabetului englez și spații.
Exemplu: dacă se citește propoziția: aceasta e ziua cand zalmoxe a apărut,
programul va afișa: Vocale: 3, Consoane: 3
Limbajul Python
text = input()
vocale = "aeiou"
count_vocale = 0
count_consoane = 0
cuvinte = [Link]()
for cuv in cuvinte:
if cuv:
prima = cuv[0].lower()
if [Link]():
if prima in vocale: count_vocale += 1
else: count_consoane += 1
print(f"Vocale: {count_vocale}, Consoane: {count_consoane}")

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
bool este_vocala(char ch) {
ch = tolower(ch);
return ch=='a' || ch=='e'|| ch =='i' || ch=='o'|| ch=='u';
}
int main() {
char text[256]; int vocale = 0, consoane = 0;
[Link](text, 256);
bool inceput_cuvant = true;
for (int i = 0; text[i]; i++) {
if (isalpha(text[i])) {
if (inceput_cuvant) {
if (este_vocala(text[i])) vocale++;
else consoane++;
inceput_cuvant = false; }
} else inceput_cuvant = true;
}
cout << "Vocale: " << vocale << ", Consoane: " << consoane << endl;
return 0;
}

127
28. Scrieți un program Python/C++ care citește un text reprezentând o comandă rostită de
pilotul unui OZN și verifică dacă toate cuvintele încep cu aceeași literă. În caz afirmativ,
programul va afișa mesajul ACTIVAT, altfel va afisa mesajul EROARE. Textul citit este
format din cel mult 256 de caractere, doar litere mici ale alfabetului englez și spații.
Exemplu: dacă se citește textul: zorzon zare zibri atunci programul va afișa mesajul:
ACTIVAT
Limbajul Python

text = input()
cuvinte = [Link]()
initiala = cuvinte[0][0].lower()
activat = True
for cuvant in cuvinte:
if cuvant[0].lower() != initiala:
activat = False
break
if activat:
print("ACTIVAT")
else:
print("EROARE")

Limbajul C/C++

#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;

int main() {
char text[256];
[Link](text, 256);
char initiala = '\0';
bool ok = true;
for (int i = 0; text[i]; i++) {
if (i == 0 || (text[i - 1] == ' ' && isalpha(text[i]))) {
char lit = tolower(text[i]);
if (initiala == '\0') initiala = lit;
else if (lit != initiala) {
ok = false; break;
}
}
}
cout << (ok ? "ACTIVAT" : "EROARE");
return 0;
}

29. Scrieți un program în Python/C++ care citește de la tastatură un cuvânt format din
litere mari și mici ale alfabetului englez. Programul va trata literele mari și mici ca fiind
identice, va determina și va afișa, pe ecran, numărul de consoane din cuvânt.

128
Se consideră consoane toate literele mici din alfabetul englez care nu sunt vocale (a, e,
i, o, u).
De exemplu, pentru bacalaureat, se va afişa 5.

Limbajul Python

cuvant = input("Introduceți un cuvânt: ")


vocale = "aeiou"
count = 0
for litera in cuvant:
if [Link]() and litera not in vocale:
count += 1
print("Numărul de consoane este:", count)

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
int main() {
char a[100];
int i, count = 0;
cout<<"Introduceți un cuvânt: ";
cin >> a;
for (i = 0; i < strlen(a); i++) {
if (isalpha(a[i])&& strchr("aeiou", a[i]) == 0)
count++;
}
cout << "Nr. de consoane este: " << count;
return 0;
}

30. Scrieți un program Python/C++ care citește de la tastatură un șir format din cel mult
100 de caractere, litere mici, litere mari, spații și semne de punctuație ale alfabetului
englez. Să se modifice și să se afișeze textul astfei încât toate literele mari vor fi
transformate în litere mici, toate semnele de punctuație vor fi înlocuite cu caracterul * și
toate celelalte caractere (litere mici, spații, cifre etc.) rămân nemodificate.

De exemplu, pentru: Salut, Lume! 2024 este aici.


se va afişa: salut* lume* 2024 este aici*

Limbajul Python Limbajul C/C++

s=input("Introdu propoziția: ") #include <iostream>


rez = "" #include <string>
i=0 #include <cctype>

129
while i < len(propozitie): using namespace std;
int main() {
c = propozitie[i]
char s[100], rez[] = "",c;
if [Link]():
cout << "Intro propoziția: ";
rez += [Link]() getline(cin, s);
elif c in ".,!?": i=0;
rez += '*' while(i<strfeng(s)){
c=s[i];
else:
if (isupper(c))rez += tolower(c);
rez += c
else
i+=1 if(c=='.'||c==','||c=='!'||c=='?')
print("Rezultatul este:", rez) rez += '*';
else rezt += c;
i++;
}
cout << "Rezultatul este: " << rez;
return 0;
}

31. Scrieți un program Python/C++ care citește de la tastatură un șir format din cel mult
100 de caractere, doar litere mici ale alfabetului englez și spații. Programul determină
numărul literelor mici din șir situate între două spații sau între un spațiu și marginea
șirului, apoi afișează pe ecran acest număr.
De exemplu, pentru textul ”a b cDe f g ”, se va afișa: 3 ( literele a,b și g se afla
între spații)

Limbajul Python

text =input("Introdu textul: ")


count = 0
length = len(text)
for i in range(length):
if text[i].islower():
if (i==0 or text[i-1]==' ') and (i==length - 1 or text[i+1]==' '):
count += 1
print("Număr de litere mici între spații sau margini:", count)

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
int main() {
char text[101];
boole i_spatiu, d_spatiu;
cout << "Introduceți textul: ";
[Link](text, 101);
int count = 0;
int len = strlen(text);

130
for (int i = 0; i < len; i++) {
if (islower(text[i])) {
i_spatiu=(i==0)||(text[i - 1]==' ');
d_spatiu=(i==len - 1)||(text[i + 1] == ' ');
if (i_spatiu && d_spatiu)
count++;
}
}
cout << "Număr de litere mici între spații sau margini: " << count;
return 0;
}

32. Un erou dintr-o legendă citește un cuvânt scris pe o stâncă magică. Stânca creează un
efect special: afișează un șir nou format astfel: prima literă a cuvântului, apoi
cuvântul inversat, urmat de ultima literă a cuvântului original.
Scrieți un program Python/C++ care citește cuvântul și afișează „reflexia dublă”
generată de stâncă.
De exemplu, pentru cuvântul dragon, se va afișa: dnogardn

Limbajul Python

def inverseaza(cuvant):
return cuvant[::-1]
cuv = input("Introduceți cuvântul: ")
if len(cuv) >= 2:
inv = inverseaza(cuv)
rezultat = cuv[0] + inv + cuv[-1]
print("Reflexia dublă este:", rezultat)
else:
rezultat = cuv * 3
print("Reflexia simplă este:", rezultat)

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
void inverseaza(char original[], char invers[]) {
int n = strlen(original);
for (int i = 0; i < n; i++) invers[i] = original[n - 1 - i];
invers[n] = '\0';
}

int main() {
char cuvant[101];
char invers[101];
char rezultat[205];

131
cout << "Introduceti cuvantul: ";
cin >> cuvant;
int lungime = strlen(cuvant);
if (lungime >= 2) {
inverseaza(cuvant, invers);
rezultat[0] = cuvant[0]; // prima literă

rezultat[1] = '\0';
strcat(rezultat, invers); // + inversul
int lenRez = strlen(rezultat);
rezultat[lenRez] = cuvant[lungime - 1]; // + ultima literă
rezultat[lenRez + 1] = '\0';
cout << "Reflexia dubla este: " << rezultat << endl;
} else {
rezultat[0] = cuvant[0];
rezultat[1] = cuvant[0];
rezultat[2] = cuvant[0];
rezultat[3] = '\0';

cout << "Reflexia simpla este: " << rezultat << endl;
}
return 0;
}

33. Un agent spațial primește o secvență de cuvinte [Link] trebuie să verifice dacă
toate cuvintele din mesaj au aceeași lungime. Dacă condiția se îndeplinește atunci
se va afișa mesajul COD VALID, altfel se va afișa mesajul COD INVALID
Scrieți un program Python/C++ care citește de la tastatură un șir format din cel mult
100 de caractere, doar litere mici ale alfabetului englez și spații și afișează mesajul
corespunzător.
De exemplu, pentru textul alfa beta gama, se va afișa pe ecran : COD VALID
pentru textul start stop stare stea, se va afișa pe ecran : COD INVALID

Limbajul Python
text = input("Introduceți mesajul criptat: ").strip()
cuvinte = [Link]()

lungime = len(cuvinte[0])
valid = all(len(cuvant) == lungime for cuvant in cuvinte)

print("COD VALID" if valid else "COD INVALID")

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;

132
int main() {
char sir[256];
cout << "Introduceti mesajul criptat: ";
[Link](sir, 256);
int i = 0, lungimeCurenta = 0, lungimeInitiala = -1;
bool valid = true;
while (sir[i]) {
while (sir[i] == ' ') i++;
if (sir[i] == '\0') break;
lungimeCurenta = 0;
while (sir[i] != '\0' && sir[i] != ' ') {
lungimeCurenta++; i++;
}
if (lungimeInitiala == -1) {
lungimeInitiala = lungimeCurenta;
} else {
if (lungimeCurenta != lungimeInitiala) {
valid = false; break;
}
}
}
cout << (valid ? "COD VALID" : "COD INVALID");
return 0;
}

34. Scrieți un program Python/C++ care citește de la tastatură un șir format din cel mult
100 de caractere, doar litere mici ale alfabetului englez și spații. Să se afișeze aceeași
propoziție, în care literele din fiecare cuvânt sunt inversate, dar ordinea cuvintelor
rămâne neschimbată.
De exemplu, pentru textul mama are mere, se va afișa pe ecran : amam era erem

Limbajul Python Limbajul C/C++


prop=input("Introduceți #include <iostream>
propoziția: ") #include <cstring>
cuv = [Link]()
#include <algorithm>
cuv_inv = []
for cuvant in cuv: using namespace std;
inv=cuvant[::-1] int main() {
cuv_inv.append(inversat) char linie[256];
rez = ' '.join(cuv_inv) cout << "Introduceți propoziția: ";
[Link](linie, 256);
print("Prop finala este:",rez) char* cuvant = strtok(linie, " ");
while (cuvant != NULL) {
int len = strlen(cuvant);
reverse(cuvant, cuvant + len);
cout << cuvant << " ";
cuvant = strtok(NULL, " ");
}
return 0;
}

35. Scrieți un program Python/C++ care citește de la tastatură un șir format din cel mult
100 de caractere, doar litere mici ale alfabetului englez, separate prin spații care să
afișeze cuvintele ordonate alfabetic descrescător, dar fiecare scris cu litere mari.

133
De exemplu, pentru textul ana iubeste muzica si dansul,
se va afișa: SI MUZICA IUBESTE DANSUL ANA

Limbajul Python

propozitie = input().strip()
cuvinte = [Link]()
[Link](reverse=True)
cuvinte_mari = [[Link]() for c in cuvinte]
print(" ".join(cuvinte_mari))

Limbajul C/C++
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int main() {
char linie[101],*p, cuvinte[101][21];
int nr = 0;
[Link](linie, 101);
p = strtok(linie, " ");
while (p != NULL) {
strcpy(cuvinte[nr], p); nr++; p = strtok(NULL, " ");
}
for (int i = 0; i < nr - 1; i++) {
for (int j = i + 1; j < nr; j++) {
if (strcmp(cuvinte[i], cuvinte[j]) < 0) {
char aux[50];
strcpy(aux, cuvinte[i]);
strcpy(cuvinte[i], cuvinte[j]);
strcpy(cuvinte[j], aux);
}
}
}
for (int i = 0; i < nr; i++) {
for (int j = 0; j < strlen(cuvinte[i]); j++)
cuvinte[i][j] = toupper(cuvinte[i][j]);
cout << cuvinte[i] << " "; }
return 0;
}

36. Se dau două șiruri de caractere formate din litere mici ale alfabetului englez.
Scrieți un program Python/C++ care citește de la tastatură două șiruri de caractere e
formate din cel mult 100 de caractere, doar litere mici ale alfabetului englez și spații, și

134
afișează toate caracterele distincte din al doilea șir care apar și în primul șir, în ordinea
apariției lor în al doilea șir.
De exemplu, pentru textul sir1 = "echipament" și sir2 = "teatru"
se va afișa: t e a u.

Limbajul Python

sir1=input("Introduceți primul șir: ").strip()


sir2=input("Introduceți al doilea șir:").strip()
afisate = set()
for lit in sir2:
if lit in sir1 and lit not in afisate:
print(lit, end=" ")
[Link](lit)

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sir1[101], sir2[101], c;
bool dejaAfis[256] = {false};
cout << "Introdu primul șir: ";
[Link](sir1, 101);
cout << "Introdu al doilea șir: ";
[Link](sir2, 101);
cout << "Caractere comune unice în ordinea din al doilea șir: ";
for (int i=0;i<strlen(sir2);i++){
c = sir2[i];
if(strchr(sir1,c)
if(!dejaAfis[(unsigned char)c]){
cout << c << " "; dejaAfis[(unsigned char)c]=true; }
}
return 0;
}

37. Un arheolog a descoperit o inscripție străveche formată din cuvinte scrise cu litere
mici și separate prin spațiu. Unele cuvinte par să fie „reflexii perfecte” – adică se
citesc la fel de la stânga la dreapta și de la dreapta la stânga.
Scrieți un program Python/C++ care citește de la tastatură un șir format din cel mult
100 de caractere, doar litere mici și mari ale alfabetului englez și spații, care identifică
toate aceste reflexii perfecte (palindromuri) și afișează cuvântul reflexie cu număr
impar de litere și lungime maximă. Dacă nu există niciunul, afișează mesajul nici un
simbol simetric
De exemplu, pentru textul radar civic noon level madam rotator,
se va afișa: rotator

135
Limbajul Python
ins =input("Introd inscripția: ")
cuv =[Link]()
rez =""
if cuv==cuv[::-1]and len(cuv)%2==1:
if len(cuv) > len(rez): rez = cuv
if rez == "": print("niciun simbol simetric")
else: print(rez)

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
bool Palindrom(const char cuv[]) {
int n = strlen(cuv);
for (int i = 0;i<n / 2; i++)
if (cuv[i]!=cuv[n-1-i]) return false;
return true;
}

int main() {
char linie[101];
char celMaiLung[101] = "";
int lung;
cout << "Introdu inscripția ";
[Link](linie, 101);
char* cuvant = strtok(linie, " ");
char celMaiLung[101] = "";
while (cuvant != NULL) {
lung=strlen(cuvant);
if (Palindrom(cuvant)&& lungime % 2 == 1)
if(lung > strlen(celMaiLung)) strcpy(celMaiLung, cuv);
}
cuvant = strtok(NULL, " ");
if (strlen(celMaiLung) == 0) cout << "niciun simbol simetric";
else cout << celMaiLung;
return 0;
}

38. Scrieți un program Python/C++ care citește de la tastatură un text format din cel mult
100 de caractere, doar litere mici și mari ale alfabetului englez și spații. Literele din text
sunt grupate în cuvinte iar cuvintele sunt separate prin câte un spațiu. Programul
afișează pe ecran fiecare cuvânt precedat de forma sa inversă, în ordinea în care apar
în șirul inițial.
De exemplu, pentru textul Ana merge CuTaxi,
se va afișa: anA Ana egrem merge ixaTuC CuTaxi

136
Limbajul Python
text = input("Introduceți șirul: ").strip()
cuvinte = [Link]()
for cuv in cuvinte:
invers = cuv[::-1]
print(invers, cuv, end=' ')

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
void inverseaza(char cuv[], char invers[]) {
int n = strlen(cuv);
for (int i = 0; i < n; i++) invers[i] = cuv[n - 1 - i];
invers[n] = '\0';
}

int main() {
char linie[101],*p, cuvant[51], invers[51];
cout << "Introduceți șirul: ";
[Link](linie, 101);
p = strtok(linie, " ");
while (p != NULL) {
strcpy(cuvant, p);
inverseaza(cuvant, invers);
cout << invers << " " << cuvant << " ";
p = strtok(NULL, " ");
}
return 0;
}

39. Scrieți un program Python/C++ care citește de la tastatură un șir format din cel mult
250 de caractere, doar litere mici ale alfabetului englez. Programul afișează numărul de
vocale din text. Se consideră vocale literele: ’a’,’e’,’i’, o’,’u’.
De exemplu, dacă se citește șirul septembrie , programul va afișa șirul 4

Limbajul Python Limbajul C/C++

s=input() #include <iostream>


#include <cstring>
v="aeiou"
using namespace std;
nv=0 int main()
for i in range(len(s)): {
if s[i] in v: char s[101];
char voc[]="aeiou";
nv=nv+1
int i,nv=0;
print(nv) [Link](s,101);
for(i=0; i<strlen(s);i++)
if(strchr(voc, s[i]))
nv++;
cout<<nv;
return 0;
}

137
40. Scrieți un program Python/C++ care citește de la tastatură un text format din cel mult
100 de caractere, doar litere ale alfabetului englez și spații. Programul determină
numărul de perechi de caractere consecutive identice din text.
De exemplu, pentru textul citit copiii vin in numar mareee la zoo programul
va afișa: 5.
Limbajul Python

s=input()
v="aeiou"
k = 0
for i in range(1,len(s)):
if s[i]==s[i-1]: k+=1
print (k)

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
int main()
{ char s[101];
char voc[]="aeiou";
int i,k=0;
[Link](s,101);
for(i=1; i<strlen(s)-1;i++)
if(s[i]==s[i+1]) k++;
cout<<k;
return 0;
}

41. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


(0<n<100) și n cuvinte. Un cuvânt este format din cel mult 31 de caractere, doar litere
mici ale alfabetului englez. Programul afișează pe ecran cuvintele oglindite, în ordinea
citirii lor.
De exemplu, pentru n=5 și cuvintele:
ana
are
cojoc
rosu
frumos programul va afișa:
ana
era
cojoc
usor
somurf.

138
Limbajul Python

n = int(input())
for i in range(n):
s = input().strip()
caractere = list(s)
for j in range(len(caractere) // 2):
caractere[j],aractere[-1 - j] = caractere[-1 - j], caractere[j]
oglindit = ''.join(caractere)
print(oglindit)

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char s[31],c;
int i,j,n;
cin>>n;

for(i=1; i<=n;i++)
{
cin>>s;
for(j=0;j<strlen(s)/2;j++)
{
c=s[i];
s[i]=s[strlen(s)-1-i];
s[strlen(s)-1-i]=c;
}
cout<<s<<endl;
}
return 0;
}

42. Scrieți un program Python/C++ care citește de la tastatură un număr natural


n(0<n<100) și n cuvinte. Un cuvânt este format din cel mult 31 de caractere, doar
litere mici ale alfabetului englez. Programul afișează pe ecran numărul de cuvintele
palidrom, respectiv numărul de cuvinte care încep și se termină cu același caracter.
Cele două numere se afișează pe rânduri diferite.
De exemplu, pentru n=5 și cuvintele:
ana
are
cojoc
rosu
frumos programul va afișa:
2
2

139
Limbajul Python

n = int(input())
np = 0 # număr de palindroame
nc = 0 # număr de cuvinte cu prima literă egală cu ultima
for i in range(n):
s = input().strip()
a = s
# păstrăm originalul pentru comparație
s_reversed = s[::-1]
# inversăm șirul
if a == s_reversed: np =np+1
if s[0] == s[-1]: nc =nc+1
print(np)
print(nc)

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char s[31],c,a[31];
int i,j,n,np=0,nc=0;
cin>>n;
for(i=1; i<=n;i++)
{ cin>>s; strcpy(a,s);
for(j=0;j<strlen(s)/2;j++)
{ c=s[j]; s[j]=s[strlen(s)-1-j]; s[strlen(s)-1-j]=c; }
if(strcmp(a,s)==0) np++;
if(s[0]==s[strlen(s)-1]) nc++;
}
cout<<np<<endl<<nc;
return 0;
}

140
VI. Liste

1. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n


(n<100) și care construiește o listă cu numere citite de la tastatură. Numerele citite
sunt naturale din intervalul [1,1000]. Programul afişează ca în exemplu.
a) lista, de la primul la ultimul element;
b) lista, de la ultimul la primul element;
c) doar elementele listei aflate pe poziții pare, de la primul la ultimul;
d) doar elementele impare ale listei, de la primul la ultimul;
Exemplu: dacă se citesc, în această ordine, de pe linii separate, valorile:
5 2 8 0 9 90
se afișează pe ecran:
a) Lista de la primul la ultimul element:
[2, 8, 0, 9, 90]
b) Lista de la ultimul la primul element:
[90, 9, 0, 8, 2]
c) Elementele de pe pozitii pare:
[8, 9]
d) Elementele impare din lista:
[9]

Limbajul Python
n = int(input())
lista = []
for i in range(n):
numar = int(input())
[Link](numar)
print("\na) Lista de la primul la ultimul element:")
print(lista)
print("\nb) Lista de la ultimul la primul element:")
print(lista[::-1])
print("\nc) Elementele de pe pozitii pare:")
print([lista[i] for i in range(1, len(lista), 2)])
print("\nd) Elementele impare din lista:")
print([x for x in lista if x % 2 == 1])
Limbajul C/C++

#include <iostream>
using namespace std;
int main()
{
int n;
int lista[100];
cin>>n;
for(int i=0;i<n;++i)
cin>>lista[i];
cout<<"\na) Lista de la primul la ultimul element:";
for(int i=0;i<n;++i)
cout<<lista[i]<<" ";

cout<<"\nb) Lista de la ultimul la primul element:";


for(int i=n-1;i>=0;--i)
cout<<lista[i]<<" ";

141
cout <<"\nc) Elementele de pe pozitii pare:";
for(int i=1;i<n; i+=2)
cout<<lista[i]<<" ";
cout<<"\nd) Elementele impare din lista:";
for(int i=0;i<n;++i)
if(lista[i]%2==1)
cout<<lista[i]<<" ";
return 0;
}
2. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și care construiește o listă cu numere citite de la tastatură. Numerele citite
sunt naturale din intervalul [1,1000]. Programul afișează lista, apoi adaugă un nou
element egal cu suma celor n elemente și afişează lista.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile 5 12 3 9 1
0
se afișează
Lista initiala:
[12, 3, 9, 1, 0]
Lista finala:
[12, 3, 9, 1, 0, 25]
Limbajul Python
n = int(input())
lista = []
for i in range(n):
numar = int(input())
[Link](numar)
print("\nLista initiala:")
print(lista)
suma = sum(lista)
[Link](suma)
print("\nLista finala:")
print(lista)
Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{
int n;
int lista[101];
cin >> n;
for(int i=0;i<n;++i)
cin>>lista[i];

cout << "\nLista initiala: ";


for(int i=0;i<n;++i)
cout<<lista[i]<< " ";
int suma=0;
for(int i=0;i<n;++i)
suma+=lista[i];
lista[n]=suma;
++n;
cout<<"\nnLista finala:";
for(int i=0;i<n;++i)
cout<<lista[i]<<" ";
return 0;
}

142
3. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și care construiește o listă cu numere citite de la tastatură. Numerele citite
sunt întregi din intervalul [-1000,1000]. Programul afișează lista, o sortează
crescător, o sortează descrescător, șterge elementele cu ultima cifră 5 din lista inițială.
După fiecare operație afișează listele obținute ca în exemplu.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile 6 23 -135
55 -89 235 -21
se afișează
Lista initiala:
[23, -135, 55, -89, 235, -21]
Lista sortata crescator:
[-135, -89, -21, 23, 55, 235]
Lista sortata descrescator:
[235, 55, 23, -21, -89, -135]
Lista modificata:
[23, -89, -21]

Limbajul Python

n = int(input())
lista = []
for i in range(n):
numar = int(input())
[Link](numar)
print("\nLista initiala:")
print(lista)
lista_cresc = sorted(lista)
print("\nLista sortata crescator:")
print(lista_cresc)
lista_descresc = sorted(lista, reverse=True)
print("\nLista sortata descrescator:")
print(lista_descresc)
lista_5 = [x for x in lista if abs(x) % 10 != 5]
print("\nLista modificata:")
print(lista_5)

Limbajul C/C++

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,lista[100];
cin>>n;
for(int i=0; i<n; i++)
cin>>lista[i];
cout<<"\nLista initiala:";
for(int i=0; i<n; i++)
cout<<lista[i]<< " ";
int listaCresc[100];
for(int i=0; i<n; i++)
listaCresc[i]=lista[i];
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
if(listaCresc[i]>listaCresc[j])

143
{
int temp=listaCresc[i];
listaCresc[i]=listaCresc[j];
listaCresc[j]=temp;
}
cout<<"\nLista sortata crescator:";
for(int i=0;i<n; i++)
cout<<listaCresc[i]<<" ";
int listaDesc[100];
for(int i=0; i<n; i++)
listaDesc[i]=lista[i];
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
if(listaDesc[i]<listaDesc[j])
{
int temp=listaDesc[i];
listaDesc[i]=listaDesc[j];
listaDesc[j]=temp;
}
cout<<"\nLista sortata descrescator:";
for(int i=0; i<n; i++)
cout<<listaDesc[i]<<" ";
int lista_5[100];
int m=0;
for(int i=0;i<n;i++)
if(abs(lista[i])%10!=5)
{
lista_5[m]=lista[i];
m++;
}
cout<<"\nLista modificata:";
for(int i=0;i<m;i++)
cout<<lista_5[i]<<" ";
return 0;
}
4. Scrieți un program Python/C++ care citește de la tastatură două numere naturale
nenule n1 și n2 (n1,n2<100) și care construiește două liste L1 și L2 cu n1, respectiv
n2 elemente, numere naturale citite de la tastatură. Numerele citite sunt naturale din
intervalul [1,100]. Programul afișează ca în exemplu cele două liste, apoi:
1) o nouă listă L3, cu elementele comune celor două liste L1 și L2, scrise o
singură dată;
2) o nouă listă L4, cu elementele comune și necomune celor două liste L1 și L2,
scrise o singură dată;
3) o nouă listă L5, cu elementele care apar doar în prima listă L1 și nu apar în cea
de-a doua listă L2, o singură dată;
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile 5 4 23 12
45 67 19 67 78 45 12
se afișează
L1: [23, 12, 45, 67, 19]
L2: [67, 78, 45, 12]
L3: [67, 12, 45]
L4: [67, 12, 45, 78, 19, 23]
L5: [19, 23]

144
Limbajul Python

n1 = int(input())
n2 = int(input())
L1 = []
for i in range(n1):
x = int(input())
[Link](x)
L2 = []
for i in range(n2):
x = int(input())
[Link](x)
print("\nL1:", L1)
print("L2:", L2)
L3 = list(set(L1) & set(L2))
print("L3:", L3)
L4 = list(set(L1) | set(L2))
print("L4:", L4)
L5 = list(set(L1) - set(L2))
print("L5:", L5)

Limbajul C/C++

#include <iostream>
using namespace std;
int main()
{
int n1,n2;
int L1[100],L2[100];
int L3[100],L4[200],L5[100];
int m3=0,m4=0,m5=0;
cin>>n1>>n2;
for(int i=0; i<n1; i++)
cin>>L1[i];
for(int i=0; i<n2; i++)
cin>>L2[i];
cout<<"\nL1:";
for(int i=0; i<n1; i++)
cout<<L1[i]<<" ";
cout<<"\nL2:";
for(int i=0; i<n2; i++)
cout<<L2[i]<<" ";
for(int i=0; i<n1; i++)
for(int j=0; j<n2; j++)
{
if(L1[i]==L2[j])
{
bool exista=false;
for(int k=0; k<m3; k++)
{
if(L3[k]==L1[i])
{
exista=true;
break;
}
}
if(!exista)
L3[m3++]=L1[i];
}
}

145
cout<<"\nL3:";
for(int i=0; i<m3; i++) cout<<L3[i]<<" ";
for(int i=0; i<n1; i++)
{
bool exista=false;
for(int k=0; k<m4; k++)
if(L4[k]==L1[i]) { exista=true; break; }
if(!exista) L4[m4++]=L1[i];
}
for(int i=0; i<n2; i++)
{
bool exista=false;
for(int k=0; k<m4; k++)
if(L4[k]==L2[i]) { exista=true; break; }

if(!exista) L4[m4++]=L2[i];
}
cout<<"\nL4:";
for(int i=0;i<m4;i++) cout<<L4[i]<<" ";
for(int i=0;i<n1;i++)
{
bool inL2=false;
for(int j=0;j<n2;j++)
if(L1[i]==L2[j])
{ inL2=true; break; }
if(!inL2)
{ bool deja=false;
for(int k=0;k<m5;k++)
if(L5[k]==L1[i]) { deja=true; break; }
if(!deja) L5[m5++]=L1[i];
}
}
cout<< "\nL5:";
for(int i=0;i<m5;i++) cout<<L5[i]<<" ";
return 0;
}

5. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n


(n<100) și care construiește două liste L1 și L2 cu n elemente, numere naturale citite
de la tastatură. Numerele citite sunt naturale din intervalul [1,100]. Programul
afișează ca în exemplu cele două liste, apoi:
a) o nouă listă L3, cu elementele egale cu suma elementelor din listele L1 și L2
aflate pe poziții omoloage;
b) o nouă listă L4, cu elementele egale cu cel mai mare divizor comun al
elementelor din listele L1 și L2 aflate pe poziții omoloage;
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile
5 20 24 100 6 91 15 80 35 63 20
se afișează
L1: 20 24 100 6, 91
L2: 15 80 35 63 20
L3: 35 104, 135 69, 111
L4: 5 8 5 3 1

146
Limbajul Python
n = int(input())
L1 = []
L2 = []
for i in range(n):
x = int(input())
[Link](x)
for i in range(n):
x = int(input())
[Link](x)
print("L1:", *L1)
print("L2:", *L2)
L3 = []
for i in range(n):
[Link](L1[i] + L2[i])
print("\nL3:", *L3)
L4 = []
for i in range(n):
a = L1[i]
b = L2[i]
while b != 0:
r = a % b
a = b
b = r
[Link](a)
print("\nL4:",*L4)

Limbajul C/C++

#include <iostream>
using namespace std;

int main()
{
int n;
int L1[100],L2[100],L3[100],L4[100];
cin>>n;
for(int i=0;i<n;i++) cin>>L1[i];
for(int i=0;i<n;i++)
cin>>L2[i];
cout<<"\nL1:";
for(int i=0;i<n;i++) cout<<L1[i]<<" ";
cout<<"\nL2:";
for(int i=0;i<n;i++)
cout<<L2[i]<<" ";
for(int i=0;i<n;i++)
L3[i]=L1[i]+L2[i];
cout<<"\nL3:";
for(int i=0;i<n;i++)
cout<<L3[i]<<" ";
for (int i=0;i<n;i++)
{ int a=L1[i], b=L2[i];

147
while(b!=0)
{
int r=a%b;
a=b;
b=r;
}
L4[i]=a;
}
cout<<"\nL4:";
for(int i=0;i<n;i++)
cout<<L4[i] << " ";
return 0;
}

6. Scrieți un program Python/C++ inițializează o listă L1 cu 7 elemente nume de


concurenți, L1 = ['Mihai','Gigi','Ana','Dan','Ion',’Vlad’,’Mara’].
Programul construiește a doua listă L2 cu 7 elemente, numere naturale de cel mult
două cifre, citite de la tastatură reprezentând punctajele la un concurs. Programul
afișează ca în exemplu, concurenții cu cel mai mare punctaj.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile 23 50 56
23 2 56 56 se afișează
Ana
Vlad
Mara

Limbajul Python

L1 = ['Mihai', 'Gigi', 'Ana', 'Dan', 'Ion', 'Vlad', 'Mara']


L2 = []
for i in range(7):
p = int(input())
[Link](p)
max_punctaj = max(L2)
for i in range(7):
if L2[i] == max_punctaj:
print(L1[i])

Limbajul C/C++

#include <iostream>
using namespace std;
int main()
{ char L1[7][10]={"Mihai","Gigi","Ana","Dan","Ion","Vlad","Mara"};
int L2[7];
for(int i=0;i<7;i++)
cin>>L2[i];
int max_punctaj = L2[0];
for(int i=1;i<7;i++)
if(L2[i]>max_punctaj)
max_punctaj=L2[i];
for(int i=0;i<7;i++)
if(L2[i]==max_punctaj)
cout<<L1[i]<<"\n";
return 0;
}

148
7. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și care construiește o listă cu numere citite de la tastatură. Numerele citite
sunt întregi din intervalul [-1000,1000]. Programul afișează lista, șterge toate
elementele negative și apoi afișează lista modificată.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile 5 -98 8 -6
-8 56
se afișează
-98 8 -6 -8 56
8 56

Limbajul Python Limbajul C/C++

n = int(input()) #include <iostream>


L = [] using namespace std;
for _ in range(n): int main()
x = int(input()) {
[Link](x) int n;
print(*L) int L[100];
L = [x for x in L if x >= 0] int m=0;
print(*L) cin>>n;
for(int i=0;i<n;i++)cin>>L[i];
for(int i=0;i<n;i++)
cout<<L[i]<<" ";
cout<<"\n";
for(int i=0;i<n;i++)
if(L[i]>=0)
L[m++]=L[i];
for(int i=0;i<m;i++)
cout<<L[i]<< " ";
return 0;
}

8. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n


(n<100) și care construiește o listă cu numere citite de la tastatură. Numerele citite
sunt naturale din intervalul [0,1000]. Programul afișează lista, inserează între oricare
două numere alăturate diferența în valoare absolută și apoi afișează lista modificată.
Exemplu: dacă pentru n se citește 5 iar lista are valorile 2 45 31 60 50
se afișează 2 43 45 14 31 29 60 10 50

Limbajul Python
n=int(input())
L=[]
for _ in range(n): [Link](int(input()))
print(*L)
m=n
i=n-1
while i>0:
dif=abs(L[i]-L[i-1])
[Link](i,dif)
i-=1
m+=1
print(*L)

149
Limbajul C/C++
#include<iostream>
using namespace std;
int main()
{ int n,L[200],m;
cin>>n;
for(int i=0;i<n;i++) cin>>L[i];
for(int i=0;i<n;i++) cout<<L[i]<<" ";
cout<<"\n";
m=n;
for(int i=n-1;i>0;i--)
{ int dif=L[i]>L[i-1]?L[i]-L[i-1]:L[i-1]-L[i];
for(int j=m;j>i;j--) L[j]=L[j-1];
L[i]=dif;
m++;
}
for(int i=0;i<m;i++) cout<<L[i]<<" ";
return 0;
}

9. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n


(n<100) și care construiește o listă cu numere citite de la tastatură. Numerele citite
sunt naturale din intervalul [0,1000]. Programul afișează lista, modifică ordinea
elementelor astfel încât cele cu prima cifră impară să ocupe primele poziții în ordine
crescătoare iar celelalte să ocupe ultimele poziții în ordine descrescătoare și apoi
afișează lista modificată.
Exemplu: dacă pentru n se citește 8 iar lista are valorile 123 789 45 209 35 683
49 56 se afișează
123 789 45 209 35 683 49 56
35 56 123 789 683 209 49 45

Limbajul Python
n=int(input())
L=[]
for _ in range(n):
[Link](int(input()))
print(*L)
impari=[]
pari=[]
for x in L:
y=x
while y>=10:
y//=10
if y%2==1:
[Link](x)
else:
[Link](x)
for i in range(len(impari)-1):
for j in range(i+1,len(impari)):
if impari[i]>impari[j]:
impari[i],impari[j]=impari[j],impari[i]

150
for i in range(len(pari)-1):
for j in range(i+1,len(pari)):
if pari[i]<pari[j]:
pari[i],pari[j]=pari[j],pari[i]
L_mod=impari+pari
print(*L_mod)

Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{ int n,L[100];
cin>>n;
for(int i=0;i<n;i++) cin>>L[i];
for(int i=0;i<n;i++) cout<<L[i]<<" ";
cout<<"\n";
int impari[100],par[100];
int imp=0,p=0;
for(int i=0;i<n;i++)
{
int x=L[i];
while(x>=10)x/=10;
if(x%2==1) impari[imp++]=L[i];
else par[p++]=L[i];
}
for(int i=0;i<imp-1;i++)
for(int j=i+1;j<imp;j++)
if(impari[i]>impari[j])
{ int aux=impari[i];
impari[i]=impari[j];
impari[j]=aux;
}
for(int i=0;i<p-1;i++)
for(int j=i+1;j<p;j++)
if(par[i]<par[j])
{ int aux=par[i];
par[i]=par[j];
par[j]=aux; }
for(int i=0;i<imp;i++) L[i]=impari[i];
for(int i=0;i<p;i++) L[imp+i]=par[i];
for(int i=0;i<n;i++) cout<<L[i]<<" ";
return 0;
}
10. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și care construiește o listă cu numere citite de la tastatură. Numerele citite
sunt naturale din intervalul [0,1000]. Programul afișează lista, verifică dacă toate
elementele sunt diferite două câte două și afișează un mesaj corespunzător (da/nu).
Exemplu: dacă pentru n se citește 5 iar lista are valorile 45 23 14 45 6
se afișează
45 23 14 45 6
nu

151
Limbajul Python

n=int(input())
L=[]
for _ in range(n): [Link](int(input()))
print(*L)
distincte=True
for i in range(n-1):
for j in range(i+1,n):
if L[i]==L[j]: distincte=False
if distincte: print("da")
else: print("nu")

Limbajul C/C++

#include <iostream>
using namespace std;
int main()
{
int n,L[100];
bool distincte=true;
cin>>n;
for(int i=0;i<n i++)
cin>>L[i];
for(int i=0;i<n;i++)
cout<<L[i]<<" ";
cout<<"\n";
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(L[i]==L[j])
distincte=false;
if(distincte) cout<<"da";
else cout<<"nu";
return 0;
}

11. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și care construiește o listă cu numere citite de la tastatură în ordine
crescătoare, apoi un numar natural nenul m (m<100) și care construiește o a doua listă
cu numere citite de la tastatură în ordine crescătoare. Numerele citite sunt naturale din
intervalul [1,1000]. Programul construiește în memorie o a treia listă cu elementele
aranjate în ordine crescătoare apoi o afișează pe ecran.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile
5 2 4 5 7 9
4 1 4 6 12
Se va afișa lista: 1 2 4 4 5 6 9 12

Limbajul Python

n1=int(input("Numărul de elemente din prima listă: "))


print("Introduce elementele:")
lista1=[]
for _ in range(n1):
[Link](int(input()))

152
n2=int(input("Numărul de elemente din a doua listă: "))
print("Introduce elementele:")
lista2=[]
for _ in range(n2):
[Link](int(input()))
i=0
j=0
n3=0
lista3 = []
while i<n1 and j<n2:
if lista1[i] < lista2[j]:
[Link](lista1[i])
i+= 1
else:
[Link](lista2[j])
j+= 1
n3+=1
while i<n1:
[Link](lista1[i])
i+= 1
n3+= 1
while j<n2:
[Link](lista2[j])
j+=1
n3+=1
print(lista3)

Limbajul C/C++
#include <iostream>
using namespace std;
int main() {
int n1,n2,i,j,lista1[101],lista2[101],lista3[201],n3=0;
cout<<"Numărul de elemente din prima listă: ";
cin>>n1;
cout<<"Introduce elementele:";
for(i=0;i<n1;i++) cin>>lista1[i];
cout<<"Numărul de elemente din a doua listă: ";
cin>>n2;
cout<<"Introduce elementele:";
for(i=0;i<n2;i++)cin>>lista2[i];
i=0; j=0;
while(i<n1 && j<n2) {
if(lista1[i]<lista2[j])
{ lista3[n3]=lista1[i]; i++; n3++; }
else { lista3[n3]=lista2[j]; j++; n3++; }
}
while(i<n1)
{ lista3[n3]=lista1[i]; i++; n3++; }
while(j<n2)
{ lista3[n3]=lista2[j]; j++; n3++; }
for(i=0;i<n3;i++) cout<<lista3[i]<<" ";
return 0;
}

153
12. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și un șir de n numere naturale din intervalul [1,1000]. Programul
construiește în memorie o listă în care se regăsesc mai întâi toate elementele pare
apoi cele impare. Lista se afișează pe ecran.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile 5 2 4 5 7 9
se va afișa 4 2 5 7 9

Limbajul Python
n=int(input("Numărul de elemente: "))
v=[]
for _ in range(n):
x = int(input())
if x%2==0:
[Link](0, x)
else: [Link](x)
for elem in v: print(elem, end=' ')
Limbajul C/C++

#include <iostream>
using namespace std;
int main()
{ int v[101],i,j,n,x,nr=-1;
cin>>n;
for(int i=0;i<n;i++)
{ cin>>x;
if(x%2==0)
{ nr++;
for(j=nr;j>0;j--) v[j]=v[j-1];
v[0]=x;
}
else { nr++; v[nr]=x; }
}
for(i=0;i<=nr;i++) cout<<v[i]<<" ";
return 0;
}

13. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și un șir de n numere naturale din intervalul [2,1000]. Să se insereze după
fiecare pătrat perfect radicalul pătratului perfect. Lista se afișează pe ecran.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile
5 3 25 16 7 2
Se va afișa 3 25 5 16 4 7 2
Limbajul Python
n=int(input())
v=[]
for _ in range(n): [Link](int(input()))
i=0
while i<n:
c=int(v[i]**0.5)
if c*c==v[i]:
n+=1
[Link](i+1,c)
i+=1
i+=1

154
print("Rezultatul final:")
for x in v: print(x, end=' ')

Limbajul C/C++

#include <iostream>
#include <cmath>
using namespace std;
int main()
{ int v[101],i,j,n,c;
cin>>n;
for(i=0;i<n;i++) cin>>v[i];
for(i=0;i<n;i++)
{
c=sqrt(v[i]);
if(c*c==v[i])
{ n++;
for(j=n-1;j>i;j--) v[j]=v[j-1];
v[i+1]=c;i++;
}
}
for(i=0;i<n;i++) cout<<v[i]<<" ";
return 0;
}

14. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și un șir de n numere naturale din intervalul [2,1000]. Să afișeze toate
permutările circulare, fiecare permutare pe câte un rand, elementele fiind separate
printr-un spațiu.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile 4 3 4 5 2
Se va afișa:
3 4 5 2
4 5 2 3
5 2 3 4
2 3 4 5

Limbajul Python Limbajul C/C++

n=int(input()) #include <iostream>


#include <cmath>
v=[]
using namespace std;
for _ in range(n):
int main()
[Link](int(input()))
{ int v[101],i,j,aux,n;
for _ in range(n):
cin>>n;
for elem in v:
for(i=0;i<n;i++) cin>>v[i];
print(elem, end=' ')
for(i=0;i<n;i++)
print()
{ for(j=0;j<n;j++)
aux=v[0]
cout<<v[j]<<" ";
for j in range(n-1):
cout<<endl;
v[j]=v[j+1]
aux=v[0];
v[n-1]=aux for(j=0;j<n-1;j++)
v[j]=v[j+1];
v[n-1]=aux;
}
return 0;
}

155
15. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(2<n<100) și un șir de n numere naturale din intervalul [1,1000]. Să afișeze toate
tripletele de câte trei elemente, fiecare triplet pe câte un rand, păstrându-se ordinea
numerelor din șirul inițial, elementele fiind separate printr-un spațiu, ca în exemplu.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile 4 3 4 5 2
Se va afișa
3 4 5
3 4 2
3 5 2
4 5 2

Limbajul Python

n=int(input())
v=list(map(int, input().split()))
for i in range(n - 2):
for j in range(i + 1, n - 1):
for k in range(j + 1, n): print(v[i], v[j], v[k])

Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n,i,j,k,v[101];
cin>>n;
for(i=0; i<n; i++) cin>>v[i];
for(i=0;i<n-2;i++)
for(j=i+1;j<n-1;j++)
for(k=j+1;k<n;k++)
cout<<v[i]<<" "<<v[j]<<" "<<v[k]<<"\n";
return 0;}

16. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(2<n<100) și un șir de n numere naturale din intervalul [1,1000] ce reprezintă
numerele de pe tricourile unor elevi. Să se elimine din 3 în 3 până râmane un singur
elev și să se afișeze pe ecran numerele elevilor rămași după fiecare eliminare, cu
spații între ele și pe linii separate.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile
8 7 3 4 5 2 7 6 1
Se va afișa
7 3 4 5 2 7 6 1
7 3 5 2 7 6 1
7 3 5 2 6 1
3 5 2 6 1
3 5 6 1
5 6 1
5 6
6

156
Limbajul Python
n=int(input())
v=list(map(int, input().split()))
k=0
i=0
while n!=1:
k+=1
if k%3==0:
[Link](i)
n-=1
i-=1
for elem in v: print(elem, end=' ')
print()
i+=1
if i>n-1: i=0

Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{
int n,i,j,v[101],k=0;
cin>>n;
for(i=0; i<n; i++) cin>>v[i];
i=0;
while(n!=1)
{
k++;
if(k%3==0)
{ for(j=i;j<n-1;j++) v[j]=v[j+1];
n--;
i--;
for(j=0;j<n;j++) cout<<v[j]<<" ";
cout<<endl;
}
i++;
if(i>n-1) i=0;
}
return 0;
}

17. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(2<n<100) și un șir de n numere naturale din intervalul [1,1000]. Programul
creează o listă cu cele n numere, apoi, elimină din listă fiecare număr impar și
dublează în listă fiecare număr par, apoi afișează lista pe o linie a ecranului.

Exemplu: dacă se citesc, în această ordine: 8

7 3 4 5 2 7 6 1
Programul va afișa lista:
4 4 2 2 6 6

157
Limbajul Python
n = int(input("n= "))
v = list(map(int, input("sir numere: ").split()))

i = 0
while any(x % 2 != 0 for x in v): # cât timp există numere impare
if v[i] % 2 == 0:
[Link](i + 1, v[i]) # dublare nr par
i += 2
else:
[Link](i) # eliminare nr impar
print("Lista finală:", v)

Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{
int n, v[2001],i,j;
cout << "n= "; cin >> n;
cout << "sirul de nr: ";
for ( i = 0; i < n; i++) cin >> v[i];
i=0;
while (i < n)
{ if (v[i] % 2 == 0)
{ for (j = n-1; j >= i; j--) v[j+1] = v[j];
n++; i=i+2; }
else
{ for (j = i; j < n - 1; j++) v[j] = v[j + 1];
n--;
}
}
for (int i = 0; i < n; i++)
cout << v[i] << " ";
cout << endl;
return 0;
}

18. Scrieți un program Python/C++ care citește de la tastatură un text (format din maxim
1000 de caractere), în care propozițiile sunt separate prin caracterul ‘.’. Programul
construiește o listă care în care fiecare element memorează câte o propoziție, afișează
prima propoziție din text și cea mai lunga propoziție din text, apoi sortează lexicografic
elementele listei și afișează lista sortată, ca în exemplu. Propozițiile au lungimi diferite.
De exemplu, pentru textul:
Vacanta mare. Ana are mere. La munte si la mare.
programul afișează pe ecran, pe linii separate:

Vacanta mare
La munte si la mare
['Ana are mere', 'La munte si la mare', 'Vacanta mare']

158
Limbajul Python
text = input("text: ")
lista = [Link]('.')
Lista_p = [[Link]() for p in lista if [Link]() != '']
prop1 = Lista_p[0]
print(prop1)
pmax = max(Lista_p, key=len)
print(pmax)
Lista_s = sorted(Lista_p)
print(Lista_s)

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;

int main() {
char text[1001], pmax[256], aux[256];
char Lista_p[1001][256];
int n = 0, maxl=0,i,j;
cout<<"text: ";
[Link](text, 1001);
char* p = strtok(text, ".");
while (p)
{ while (p[0] == ' ') p++;
strcpy(Lista_p[n],p); n++;
if(strlen(p)>maxl)
{ maxl=strlen(p); strcpy(pmax,p);}
p=strtok(NULL,".");
}
cout << Lista_p[0]<<endl;
cout << pmax<<endl;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(Lista_p[i],Lista_p[j])>0)
swap(Lista_p[i], Lista_p[j]);
cout <<"[ "<< Lista_p[0];
for (int i = 1; i < n; i++)
cout <<", "<< Lista_p[i];
cout<<" ]";
return 0;
}

19. Scrieți un program Python/C++ care citește de la tastatură un număr (format din
maxim 1000 de cifre). Programul construiește o listă în care fiecare element
memorează câte o cifră, apoi construiește o nouă listă care să conțină cifrele distincte
din numărul citit, împreună cu numărul de aparitii ale fiecărei cifre, ca în exemplu.
Programul afișează lista creată pe ecran, ca în exemplu.
De exemplu, pentru numărul 7271231354999, programul va afișa lista:
[1, 2, 2, 2, 3, 2, 4, 1, 5, 1, 7, 2, 9, 3]

159
Limbajul Python
n = input("n= ")
ap = [0] * 10
for c in n:
ap[int(c)] += 1
Lista = []
for c in range(10):
if ap[c] > 0:
[Link](c)
[Link](ap[c])
print(Lista)

Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
struct element
{ int c, ap;}Lista[2000];
int main()
{ int k=0, ap[10]={0}, c,i;
char n[1001];
cout<<"n= "; cin>>n;
for(i=0; i<strlen(n); i++)
ap[n[i]-'0']++;
for(c=0;c<=9;c++)
if(ap[c])
{ Lista[k].c=c; Lista[k].ap=ap[c]; k++;}
cout<<"["<<Lista[0].c<<", "<<Lista[0].ap;
for(i=1; i<k; i++) cout<<", "<<Lista[i].c<<", "<<Lista[i].ap;
cout<<"]";
return 0;
}

20. Un text (format din maxim 1000 de caractere), conține mai multe perechi de câte două
cuvinte de forma. Cele două cuvintele sunt separate printr-un spațiu, iar perechile sunt
separate prin caracterul ‘#’. Cuvintele sunt formate din cel mult 20 de litere și încep cu
o literă mare. În cadrul fiecărei perechi, cele două cuvinte reprezentă numele și
prenumele unei persoane, ca în exemplu.
Scrieți un program Python/C++ care citește de la tastatură textul, construiește o listă
ale carei elemente memorează câte o pereche și înlocuiește prenumele fiecărei
persoane cu inițială corespunzătoare urmată de caracterul ‘.’. Programul afișează pe
ecran lista modificată, ca în exemplu.
De exemplu, pentru textul: Vasile Dan#Popa Mihai#Ion Ana#Popescu Maria
programul afișează lista: ['Vasile D.', 'Popa M.', 'Ion A.', 'Popescu M.']
Limbajul Python

text = input("text: ")


lista_p = [Link]('#')
lista = []
for p in lista_p:
nume, pren = [Link]()
elem=nume+' '+pren[0] + '.'
[Link](elem)
print(lista)

160
Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
int main()
{ char text[1001], *p, *t;
int k=0, poz,i;
char lista[1001][21], elem[41];
cout<<"text= "; [Link](text,1001);
p=strtok(text,"#");
while(p)
{ strcpy(elem,p);
t=strchr(elem,' ');
poz=t-elem;
elem[poz+2]='.';
elem[poz+3]='\0';
strcpy(lista[k],elem); k++;
p=strtok(NULL,"#");
}
cout<<"["<<lista[0];
for(i=1; i<k; i++)
cout<<", "<<lista[i];
cout<<"]";
return 0;
}

21. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și care construiește o listă cu numere citite de la tastatură, de pe linii
separate. Numerele citite sunt naturale din intervalul [1,1000]. Programul afişează,
ca în exemplu:
 doar ultima cifră a elementelor pare din listă, de la primul la ultimul;
 doar elementele impare din listei, de la primul la ultimul.
Exemplu: dacă se citesc, în această ordine, de pe linii separate, valorile:
5
61
32
3
64
5

se afișează pe ecran:
a) Ultima cifră a numerelor pare din lista:
2 4
b) Elementele impare din lista:
61 3 5

Limbajul Python
n = int(input())
par = []
impar = []
for i in range(n):
a = int(input())
if a % 2 == 0: [Link](a%10)
else: [Link](a)
print("a) Ultima cifra a elementelor impare pare din lista:")

161
print(" ".join(map(str, par)))
print("b) Elementele impare din lista:")
print(" ".join(map(str, impar)))
Limbajul C/C++

#include <iostream>
using namespace std;
int main()
{
int n,a,np=0,ni=0;
int par[100],impar[100];
cin>>n;
for(int i=0;i<n;++i)
{ cin>>a;
if(a%2==0)
{ par[np]=a; np++;}
else
{ impar[ni]=a; ni++;}
}
cout <<"c) Ultima cifra a elementelor pare din lista:";
for(int i=0;i<np; i++)
cout<<par[i]<<" ";
cout<<"\nd) Elementele impare din lista:";
for(int i=0;i<ni;++i) cout<<impar[i]<<" ";
return 0;
}
22. Scrieți un program Python/C++ care citesc de la tastatură două numere naturale
nenule n (n<100) și k (k<11) și care construiește o listă cu numerele citite de la
tastatură care pot fi scrise în baza k. Numerele citite sunt naturale din intervalul
[1,1000]. Programul afișează lista creată, apoi adaugă un nou element egal cu
numărul elementelor listei n, apoi se afișează lista creată.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile 5 4
31 17 23 10 2002
se afișează:
Lista initiala:
[31, 23, 10, 2002]
Lista finala:
[31, 23, 10, 2002, 4]
Limbajul Python
n = int(input())
k = int(input())
nr=0
bazak = []
for i in range(n):
a = int(input())
Max=0
ca=a
while ca>0:
if ca%10>Max: Max=ca%10
ca=ca//10
if Max<k:
nr=nr+1
[Link](a)
print("\nLista initiala:")

162
print(bazak)
[Link](nr)
print("\nLista finala:")
print(bazak)
Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{ int n,k,a,nr=0;
int bazak[101];
cin >> n>>k;
for(int i=0; i<n; ++i)
{ cin>>a;
int Max=0; int ca=a;
while(ca)
{ if(ca%10>Max)Max=ca%10;
ca=ca/10;
}
if(Max<k)
{ bazak[nr]=a; nr++;}
}
cout << "\nLista initiala: ";
for(int i=0; i<nr; ++i) cout<<bazak[i]<< " ";
nr++;
bazak[nr-1]=nr-1;
cout<<"\nnLista finala:";
for(int i=0; i<nr; ++i) cout<<bazak[i]<<" ";
return 0;
}

23. Un cavaler a descoperit în timpul unei expediții, mai multe comori. Le-a evaluat și a
marcat pe fiecare comoară un număr natural reprezentând valoarea ei. El a observat
că, comorile marcate cu un număr par sunt niște comori magice. La întoarcerea din
expediție, înainte de a preda regelui comorile, cavalerul observă că valoarea ultimei
comori magice s-a dublat.
Scrieți un program în Python/C++ care citește de la tastatură un număr natural nenul
n (n<1000) și apoi o listă de n numere naturale (formate fiecare din cel mult 4 cifre),
reprezentând valorile comorilor găsite. Programul va afișa lista valorilor comorilor
predate regelui în care valoarea ultimei comori magice este dublată.
Exemplu: dacă se citesc, în această ordine valorile: 5 5 8 13 4 9, se afișează:
5 8 13 8 9

Limbajul Python

n=int(input())
comori = list(map(int, input("Introduceți comorile: ").split()))
# Parcurgem lista de la sfârșit spre început
for i in range(len(comori) - 1, -1, -1):
if comori[i] % 2 == 0:
comori[i] *= 2 # dublăm valoarea
break
# Afișăm lista modificată
print("Lista actualizată:", *comori)

163
Limbajul C/C++
#include <iostream>
using namespace std;
int main() {
int n, x, comori[1001], i;
cout << "Introdu numarul de elemente: "; cin >> n;
cout << "Introdu valorile: ";
for (i = 0; i < n; i++) cin >> comori[i];
for (i = n - 1; i >= 0; i--)
if (comori[i] % 2 == 0) {
comori[i] *= 2; break; }
cout << "Lista actualizata: ";
for (int i = 0; i < n; i++) cout << comori[i] << " ";
return 0;
}

24. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


(n<100), și apoi, de pe aceeași linie, separate prin câte un spațiu, n numere naturale
care formează o listă de pietre magice.
Fiecare piatră este numerotată și este analizată în funcție de suma cifrelor sale;
 dacă suma cifrelor este pară, piatra este adăugată într-o listă de echilibru.
 dacă suma cifrelor este impară, piatra este adăugată într-o listă de haos.
După completarea celor două liste, programul afișează: elementele din lista de,
sortate crescător, apoi, elementele din lista de haos, sortate tot crescător, toate pe o
singură linie, separate prin spațiu.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile:
6
13 24 18 37 40 12, se afișează: 13 24 37 40 12 18
Limbajul Python

def suma_cifre(n):
suma = 0
while n > 0:
suma += n % 10
n //= 10
return suma

n = int(input())
pietre = list(map(int, input("Introdu pietrele: ").split()))
echilibru = []
haos = []
for piatra in pietre:
if suma_cifre(piatra) % 2 == 0:
[Link](piatra)
else:
[Link](piatra)
[Link]()
[Link]()
rezultat = echilibru + haos
print(" ".join(map(str, rezultat)))

164
Limbajul C/C++

#include <iostream>
#include <algorithm>
using namespace std;

int suma_cifre(int n) {
int s = 0;
while (n) {
s += n % 10;
n /= 10;
}
return s;
}
int main() {
int n, x, echilibru[100], haos[100];
int ne = 0, nh = 0;

cin >> n;
for (int i = 0; i < n; ++i) {
cin >> x;
int s = suma_cifre(x);
if (s % 2 == 0)
echilibru[ne++] = x;
else
haos[nh++] = x;
}
sort(echilibru, echilibru + ne);
sort(haos, haos + nh);
for (int i = 0; i < ne; ++i) cout << echilibru[i] << " ";
for (int i = 0; i < nh; ++i) cout << haos[i] << " ";
return 0;
}

25. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (n ≤


100), apoi n numere naturale reprezentând coduri gravate pe pietrele oracolului.
Se cere să construiți două liste:
 una care conține doar codurile ce sunt numere prime,
 alta cu cele care NU sunt prime, dar au cel puțin 4 divizori.
Programul afișează mai întâi lista numerelor prime, apoi lista numerelor compuse cu
cel puțin 4 divizori, fiecare pe o linie separată.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile:
7
11 12 6 7 13 20 21
Se va afișa :
11 7 13
12 6 20 21
Limbajul Python

def este_prim(x):
if x < 2: return False
for d in range(2, int(x**0.5) + 1):
if x % d == 0: return False
return True

165
def numar_divizori(x):
cnt = 0
for d in range(1, x + 1):
if x % d == 0:
cnt += 1
return cnt
n = int(input())
L = []
for _ in range(n):[Link](int(input()))
prime = []
compuse = []
for x in L:
if este_prim(x):
[Link](x)
elif numar_divizori(x) >= 4:
[Link](x)

print(*prime)
print(*compuse)

Limbajul C/C++

#include <iostream>
using namespace std;

bool estePrim(int x) {
if (x < 2) return false;
if (x==2) return true;
if(x%2==0) return false;
for (int d = 3; d * d <= x; d+=2)
if (x % d == 0) return false;
return true;
}
int numarDivizori(int x) {
int cnt = 0;
for (int d = 1; d <= x; d++)
if (x % d == 0) cnt++;
return cnt;
}
int main() {
int n, x, v[100];
cin >> n;
for (int i = 0; i < n; i++) cin >> v[i];
for (int i = 0; i < n; i++)
if (estePrim(v[i])) cout << v[i] << " ";
cout << endl;
// Afișăm numerele compuse cu cel puțin 4 divizori
for (int i = 0; i < n; i++)
if (!estePrim(v[i]) && numarDivizori(v[i]) >= 4)
cout << v[i] << " ";
return 0;
}

26. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n < 100), apoi o listă de n numere naturale reprezentând forța unor zmei. Un zmeu
este considerat „norocos” dacă forța lui este un număr palindrom (ex: 121, 44, 777).
Programul va modifica fiecare valoare norocoasă din listă, marind-o cu suma cifrelor

166
eiș apoi va afisa, pe ecran, lista modificată.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile: 5 121 32
77 89 44, programul va afișa : 127 32 91 89 52

Limbajul Python
def este_palindrom(n):
return str(n) == str(n)[::-1]

def suma_cifre(n):
return sum(int(c) for c in str(n))

# Citire date
n = int(input())
lista = []
for _ in range(n):
[Link](int(input()))

# Procesare listă
for i in range(n):
if este_palindrom(lista[i]):
lista[i] += suma_cifre(lista[i])

# Afișare rezultat
print(*lista)

Limbajul C/C++

#include <iostream>
#include <vector>
using namespace std;

bool este_palindrom(int n) {
int original = n, invers = 0;
while (n > 0) {
invers = invers * 10 + n % 10; n /= 10; }
return original == invers;
}
int suma_cifre(int n) {
int suma = 0;
while (n > 0) {
suma += n % 10; n /= 10; }
return suma;
}
int main() {
int n, x,i;
cin >> n;
int lista[101];
for (i = 0; i < n; i++) cin >> lista[i];
for (i = 0; i < n; i++)
if (este_palindrom(lista[i]))
lista[i] += suma_cifre(lista[i]);

167
for (i = 0; i < n; i++) cout << lista[i] << " ";
return 0;

27. Scrieți un program Python/C++ care citește un număr natural nenul n (n < 100),
apoi o listă de n numere întregi. Verificați pentru fiecare num[r din listă dacă diferența
dintre prima și ultima cifră este 1. Înlocuiți aceste elemente cu "!1!". Afișați lista modi-
ficată.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile : 4 12 34
45 23, se va afișa : !1! 34 45 !1!

Limbajul Python

def prima_cifra(n):
while n >= 10: n //= 10
return n

def ultima_cifra(n):
return n % 10

n = int(input())
lista = []
for _ in range(n): [Link](int(input()))
for i in range(n):
prima = prima_cifra(lista[i])
ultima = ultima_cifra(lista[i])
if abs(prima - ultima) == 1: lista[i] = "!1!"

print(*lista)

Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int lista[100];
for (int i = 0; i < n; i++) cin >> lista[i];
for (int i = 0; i < n; i++) {
int x = lista[i];
int ultima = x % 10;
int prima = x;
while (prima >= 10) prima /= 10;
if (abs(prima - ultima) == 1)
cout << "!1! ";
else cout << x << " ";
}
return 0;
}

168
28. Scrieți un program Python/C++ care citește un număr natural nenul n (n < 100),
apoi o listă de n numere naturale. Programul va determina înlocuirea fiecărui număr
care conține doar cifrele 0, 1, 6, 8 sau 9, cu oglinditul său, apoi va afișa, pe ecran, lis-
ta modificată.
Exemplu: dacă se citesc, în această ordine, separate prin enter, numerele: 5 101
123 86 609 45, programul va afișa : 101 123 68 906 45

Limbajul Python
def are_cifre_valide(n):
for cifra in str(n):
if cifra not in "01689":
return False
return True

def inverseaza(n):
return int(str(n)[::-1])
n = int(input())
lista = []
for _ in range(n):
[Link](int(input()))
for i in range(n):
if are_cifre_valide(lista[i]):
lista[i] = inverseaza(lista[i])
print(*lista)

Limbajul C/C++

#include <iostream>
using namespace std;
bool are_cifre_valide(int n) {
while (n > 0) {
int cifra = n % 10;
if (cifra != 0 && cifra != 1 && cifra != 6
&& cifra != 8 && cifra != 9) return false;
n /= 10; }
return true;
}
int inverseaza(int n) {
int invers = 0;
while (n > 0) { invers = invers * 10 + n % 10; n /= 10; }
return invers;
}
int main() {
int n, x, lista[100];
cin >> n;
for (int i = 0; i < n; i++) cin >> lista[i];
for (int i = 0; i < n; i++)
if (are_cifre_valide(lista[i]))
lista[i] = inverseaza(lista[i]);
for (int i = 0; i < n; i++) cout << lista[i] << " ";
return 0;
}

169
29. Scrieți un program Python/C++ care citește un număr natural nenul n (n<100), apoi
o listă de n numere naturale. Programul determină înlocuirea fiecărui număr format
doar din cifre prime cu produsul cifrelor sale, apoi afișează pe ecran lista modificată.
Exemplu: dacă se citesc, în această ordine, separate prin enter, valorile : 6 235 54
357 23 71 444, programul va afișa : 30 54 105 6 71 444
Limbajul Python

def are_cifre_prime(n):
cifre_prime = {'2', '3', '5', '7'}
return all(c in cifre_prime for c in str(n))
def produs_cifre(n):
produs = 1
for c in str(n): produs *= int(c)
return produs
n = int(input())
lista = []
for _ in range(n): [Link](int(input()))
for i in range(n): if are_cifre_prime(lista[i]):
lista[i] = produs_cifre(lista[i])
print(*lista)

Limbajul C/C++

#include <iostream>
using namespace std;
bool are_cifre_prime(int n) {
while (n > 0) {
int cif = n % 10;
if (cif!=2 && cif!=3 && cif!=5 && cif!=7) return false;
n /= 10; }
return true;
}
int produs_cifre(int n) {
int produs = 1;
while (n > 0) { produs *= n % 10; n /= 10; }
return produs;
}
int main() {
int n, lista[100];
cin >> n;
for (int i = 0; i < n; i++) cin >> lista[i];
for (int i = 0; i < n; i++)
if (are_cifre_prime(lista[i]))
lista[i] = produs_cifre(lista[i]);
for (int i = 0; i < n; i++) cout << lista[i] << " ";
return 0; }

30. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


(2<n<35) și un șir de n numere naturale din intervalul [1,10], reprezentând
rezultatele unei evaluări la informatică a unei clase cu n elevi. Raportat la datele

170
evaluării, programul afișează pe ecran, pe linii separate, următoarele:
a) ma, reprezentând media clasei
b) nr, reprezentând numărul elevilor din clasă care au note strict mai mari
decât media clasei
c) mesajul omogen, dacă numărul elevilor clasei care au obținut note din
intervalul [|ma|-2,|ma|+2] reprezintă cel puțin 80% din n, respectiv mesajul
eterogen, în caz contrar.
Exemplu: dacă se citesc, în această ordine, separate prin enter, respectiv prin câte
un spațiu, valorile
10
6 9 8 5 10 9 3 7 7 8
Se va afișa
7.2
5
omogen
iar dacă se citesc, respectând același format de citire a datelor, valorile
10
6 9 8 5 10 9 3 7 2 2
Se va afișa
6.1
5
eterogen

Limbajul Python
n=int(input("Numarul de elevi din clasa, 2<n<35: "))
v=list(map(int, input("Lista notelor, nr. nat. din [1,10]:").split()))
nr,cati=0,0
ma=sum(v)/n
print(ma)
for x in v:
if x>ma: nr+=1
if x>=int(ma)-2 and x<=int(ma)+2: cati+=1
if cati>=0.8*n: print("omogen")
else: print("eterogen")
print(nr)
Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{ int n,v[34],i,nr=0,cati=0;
float ma,s=0;
cout<<"Numarul de elevi din clasa (2<n<35): "; cin>>n;
cout<<"Lista notelor (nr. nat. din [1,10] separate prin spatiu):";
for(i=0;i<n;i++) {cin>>v[i]; s+=v[i];}
ma=s/n;
for(i=0;i<n;i++)
{if(v[i]>ma) nr++;
if(v[i]>=int(ma)-2 and v[i]<=int(ma)+2 ) cati++;
}
cout<<ma<<'\n'<<nr<<'\n';
if(cati>=0.8*n) cout<<"omogen";
else cout<<"eterogen";
return 0;
}

171
31. Scrieți un program Python/C++ care citește de la tastatură un număr natural n (2<n≤
100) și un șir de n numere naturale, având toate cifrele nenule, din intervalul
[1,100000000), în care cel puțin un element are un număr par de cifre. Programul
construiește o listă cu cele n numere, apoi, elimină din listă fiecare element cu număr
impar de cifre și transformă restul elementelor astfel: interschimbă prima jumătate din
număr, cu a doua jumătate din număr. Programul afișează noua lista pe o linie a
ecranului, ca în exemplu.
Exemplu: dacă se citesc, în această ordine, separate prin enter, respectiv prin câte
un spațiu, valorile
4
12 123 5678 212688
Programul va afișa lista:
Noua lista: 21 7856 688212
Limbajul Python
n=int(input())
v=list(map(int, input().split()))
i=0
while i<n:
x=str(v[i])
l=len(x)
if(l%2!=0):
[Link](i)
n-=1
else:
y=x[ :l//2]
z=x[l//2: ]
v[i]=z+y
i+=1
print("Noua lista:", *v)
Limbajul C/C++
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main()
{ int n,v[100],i,j;
char s[10];
cin>>n;
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n;i++)
{ itoa(v[i],s,10);
int l=strlen(s);
if(l%2!=0)
{for(j=i;j<n-1;j++) v[j]=v[j+1];
i--;
n--;}
else
{ char a[10]="",b[10]="";
strncpy(a,s,l/2);
strcpy(b,s+l/2);
strcpy(s,b);strcat(s,a);

172
v[i]=atoi(s);
}
}
cout<<"Noua lista: ";
for(i=0;i<n;i++) cout<<v[i]<<' ';
return 0;
}

32. Un șir de numere naturale, având minim 3 elemente, se numește șir munte dacă
elementele din șir sunt în ordine strict crescătoare până la valoarea maximă din șir,
apoi sunt în ordine strict descrescătoare, după valoarea maximă din șir. Un șir strict
crescător sau un șir strict descrescător nu se consideră șir munte. De exemplu, șirul
de numere 2 8 5 3 sau șirul 1 2 6 4 3 2 este un șir munte, dar șirul 2 8 5 2
sau 2 8 5 5 sau 2 8 9 sau 2 8 8 5 nu este șir munte. Scrieți un program
Python/C++ care citește de la tastatură un număr natural n (2<n<200) și un șir de n
numere naturale din intervalul [1,10], reprezentând notele obținute de n sportivi la
un concurs. Programul afișează, pe ecran, pe linii distincte, notele concursului sortate
crescător (separate printr-un spațiu), frecvențele fiecărei note obținute, de la 1 la 10
(separate printr-un spațiu), apoi mesajul da, dacă șirul, reprezentând frecvența
notelor, este un șir munte, sau mesajul nu, în caz contrar.
Exemplu: dacă se citesc, în această ordine, separate prin enter, respectiv prin câte
un spațiu, valorile
25
6 5 6 5 5 5 5 6 3 4 6 9 2 3 4 4 4 8 8 7 7 6 6 6 7
se va afișa
2 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 6 7 7 7 8 8 9
0 1 2 4 5 7 3 2 1 0
da
deoarece frecvența notelor de la 1 la 10 este șir munte

iar dacă se citesc, respectând același format de citire a datelor, valorile


10
6 5 6 5 10 6 3 3 9 9
se va afișa
3 3 5 5 6 6 6 9 9 10
0 0 2 0 2 3 0 0 2 1
nu
deoarece frecvența notelor nu este șir munte
Limbajul Python
n=int(input())
note=list(map(int, input().split()))
rez=True
v=[0]*11
note=sorted(note)
print(*note)
for i in range(n):
v[note[i]]+=1
print(*v)
pozmax=1
for i in range(11):
if v[i]>v[pozmax]: pozmax=i

if pozmax==1 or pozmax==10:
rez=False
else:
for i in range(1,pozmax):

173
if v[i]>=v[i+1]:
rez=False
for i in range (pozmax,10):
if v[i]<=v[i+1]:
rez=False

if rez: print("da")
else: print("nu")
Limbajul C/C++
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{ int n,note[200],v[11]={0},i,j,pozmax;
bool rez=true;
cin>>n;
for(i=0;i<n;i++)
{cin>>note[i];
v[note[i]]++;}
sort(note,note+n);
for(i=0;i<n;i++)
cout<<note[i]<<' ';
cout<<'\n';
for(i=1;i<11;i++)
cout<<v[i]<<' ';
cout<<'\n';
pozmax=1;
for(i=2;i<=10;i++)
if(v[i]>v[pozmax]) pozmax=i;
if(pozmax==1 || pozmax==10)
rez=false;
else
{
for(i=1;i<pozmax;i++)
if(v[i]>=v[i+1])rez=false;
for(i=pozmax;i<10;i++)
if(v[i]<=v[i+1])
rez=false;
}
if (rez) cout<<"da";
else cout<<"nu";
return 0;
}

33. Un număr se numește număr nou dacă cifele sale sunt ordonate strict descrescător și
conține numai cifre consecutive. De exemplu, 654 este un număr nou, dar 643 sau
234 nu este un număr nou. Scrieți un program Python/C++ care citește, de la
tastatură, un număr natural n, având cel mult 300 de cifre. Programul afișează, pe
ecran, numărul minim de numere noi care se pot forma, utilizând toate cifrele
numărului n, ca în exemplul dat. Un număr cu o cifră se consideră număr nou.
De exemplu, pentru numărul n=206124556, programul va afișa 4 deoarece, cu
toate cifrele lui n, cel mai scurt șir de numere noi care utilizează toate cifrele din n
este: 2, 65, 210, 654, iar acesta are lungimea 4, iar pentru numărul n=202,
programul va afișa 3 deoarece, cu toate cifrele lui n, cel mai scurt șir de numere noi
este: 0, 2, 2 iar acesta are lungimea 3.

174
Limbajul Python
n = input("n=")
v = [0] * 11
for i in n:
v[int(i)] += 1
rez=0
for i in range(9,-1,-1):
if v[i+1]-v[i]<0:
rez=rez+v[i]-v[i+1]
print(rez)
Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
int main()
{ char n[301];
int v[11]={0},i,rez=0;
[Link](n,301);
for(i=0;n[i];i++)
v[n[i]-'0']++;
for(i=9;i>=0;i--)
if(v[i+1]-v[i]<0)
rez=rez+v[i]-v[i+1];
cout<<rez;
return 0;
}

34. Se consideră un text cu cel mult 300 de caractere, format din cel puțin două cuvinte,
în care cuvintele sunt formate din litere mici ale alfabetului englez și sunt separate prin
câte un spațiu. Scrieți un program Python/C++ care citește de la tastatură un text de
tipul menționat mai sus și construiește în memorie un nou text astfel încât, din textul
inițial, să se elimine toate cuvintele care apar de cel puțin două ori. Noul text are
cuvintele în ordinea inversă față de ordinea inițială, separate tot printr-un singur
spațiu. Programul afișează pe ecran noul text, ca în exemplu. Dacă toate cuvintele din
textul inițial apar de cel puțin două ori, se va afișa pe ecran mesajul vid.
De exemplu, pentru textul citit: a fi sau a nu fi
se afișează pe ecran nu sau
iar pentru textul
da nu nu da da
se afișează pe ecran mesajul vid

Limbajul Python

t = input(" Introduceti textul: ")


s = [Link](' ')
cs=s
nou = []
ok=False
for cuv in s:
nr=0
c=cuv

175
for c in cs:
if c==cuv: nr+=1
if nr==1:
[Link](0,cuv)
ok=True
if ok: print(*nou)
else: print("vid")
Limbajul C/C++

#include <iostream>
#include <cstring>
using namespace std;
int main()
{ char s[301], *cuv, cs[301], nou[301]="";
cout<<"Introduceti textul: ";
[Link](s,301); strcpy(cs,s);
cuv=strtok(s," ");
while(cuv)
{ char copie[301],*p;
strcpy(copie,cs);
int nr=0;
p=strstr(copie,cuv);
while(p)
{
nr++;
p=strstr(p+1,cuv);
}
if(nr==1)
{ char a[301];
strcpy(a,nou);
strcpy(nou,cuv);
strcat(nou," ");
strcat(nou,a);}
cuv=strtok(0," ");
}
if(strlen(nou)) cout<<nou;
else cout<<"vid";
return 0;
}

35. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(1 ≤ n < 100) și care construiește o listă cu numere citite de la tastatură.
Numerele citite sunt naturale din intervalul [1,1000]. Programul afişează pe ecran,
ca în exemplu, pe linii separate:
a) Numărul de elemente pare și numărul de elemente impare din listă
b) Media aritmetică a tuturor valorilor pare
c) Elementul maxim aflat pe o poziție impară (poziții indexate de la 0)
d) Suma elementelor aflate pe poziții multipli de 3 (0, 3, 6, …)
De exemplu, dacă se citesc numerele 5 12 7 9 4 2 11 18, programul
afișează:
a) Pare: 4, Impare: 3
b) Media valorilor pare: 9.0
c) Maxim pe poziții impare: 11
d) Suma elementelor pe poziții multipli de 3: 34

176
Limbajul Python

n = int(input("n = "))
while n < 1 or n >= 100:
n = int(input("n : "))

L = []
print(f"Introduceți n:")
for i in range(n):
x = int(input(f"Elementul {i + 1}: "))
[Link](x)
# a) Număr de pare și impare
nr_pare = nr_impare = 0
suma_pare = 0
for x in L:
if x % 2 == 0:
nr_pare += 1
suma_pare += x
else:
nr_impare += 1

# b) Media numerelor pare


media_pare = suma_pare / nr_pare if nr_pare != 0 else 0

# c) Maxim pe poziții impare (indexuri: 1, 3, 5...)


max_impar = None
for i in range(1, n, 2):
if max_impar is None or L[i] > max_impar:
max_impar = L[i]

# d) Suma pe poziții multipli de 3


suma_mult_3 = 0
for i in range(0, n, 3):
suma_mult_3 += L[i]
print(f"a) Pare: {nr_pare}, Impare: {nr_impare}")
print(f"b) Media valorilor pare: {media_pare:.2f}")
print(f"c) Maxim pe poziții impare: {max_impar}")
print(f"d) Suma pe poziții multipli de 3: {suma_mult_3}")

Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n, L[100];
cout << "n = "; cin >> n;
for (int i = 0; i < n; i++) cin >> L[i];
int nr_pare = 0, nr_impare = 0, suma_pare = 0;
int max_impar = -1; // presupunem toate valorile > 0
int suma_mult_3 = 0;
for (int i = 0; i < n; i++) {
if (L[i] % 2 == 0) { nr_pare++; suma_pare += L[i];}
else nr_impare++;
if (i % 2 == 1 && L[i] > max_impar) max_impar = L[i];
if (i % 3 == 0) suma_mult_3 += L[i];
}

177
cout << "a) Pare: " << nr_pare << ", Impare: " << nr_impare;
if (nr_pare)
cout << "b) Media valorilor pare: "<<(float)suma_pare/nr_pare;
else
cout << "b) Nu exista valori pare\n";
cout << "c) Maxim pe pozitii impare: " << max_impar;
cout << "d) Suma pe pozitii multipli de 3: " << suma_mult_3;
return 0; }

36. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și care construiește o listă cu numere citite de la tastatură. Numerele citite
sunt naturale din intervalul [1,1000]. Programul afișează lista inițială, apoi modifică
lista eliminând toate numerele formate din trei cifre și afișează, pe ecran, lista
modificată. Dacă lista rezultată este vidă, programul va afișa mesajul: toate
valorile au fost de 3 cifre.
De exemplu dacă se citesc, în această ordine, separate prin enter, valorile:
666 213 421 7 800 92 101
se afișează
Lista initiala: 666 213 421 7 800 92 101
Lista finala: 7 92

Limbajul Python

n = int(input("n = "))
L=[]
for i in range(n):
x = int(input(f"Elementul {i+1}: "))
[Link](x)
print("Lista inițială:", *L)
L_filtrat = [x for x in L if (x<100 or x>999)]
if L_filtrat==[]: print("toate valorile au fost de 3 cifre")
else: print("Lista finala: ", *L_filtrat)

Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n, x;
int L[100]; // lista inițială
int L2[100]; // listă pentru valorile impare
int k = 0; // număr de valori impare
cout << "n = "; cin >> n;
for (int i = 0; i < n; i++) {
cin >> x; L[i] = x;
if (x<100 || x>999) L2[k++] = x; }
cout << "Lista initiala: ";
for (int i = 0; i < n; i++)cout << L[i] << " ";
cout << endl;
if (k == 0) cout << "toate valorile au fost de 3 cifre\n";

178
else { cout << "Lista finala: ";
for (int i = 0; i < k; i++)cout << L2[i] << " ";
cout << endl; }
return 0; }

37. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și care construiește două liste L1 și L2 cu n elemente, numere naturale
citite de la tastatură. Numerele citite sunt naturale din intervalul [1,100]. Programul
afișează cele două liste, ca în exemplu, apoi construiește și afișează:
 o nouă listă L3 formată din elementele minime aflate pe poziții omoloage:
L3[i] = min(L1[i], L2[i]) ;
- O listă L4 care să conțină valoarea 1 pe pozițiile în care elementele din L1 și
L2 sunt egale, și 0 în rest;
De exempludacă se citesc, în această ordine, separate prin enter, valorile n=5 L1
[10, 20, 30, 40, 50] si L2=[5, 20, 25, 60, 50], programul va afișa:
L1: [10, 20, 30, 40, 50]
L2: [5, 20, 25, 60, 50]
L3(minime): [5, 20, 25, 40, 50]
L4(egale): [0, 1, 0, 0, 1]

Limbajul Python

n = int(input("n = "))
L1 = []
L2 = []
print("Introduceți elementele pentru lista L1:")
for i in range(n):
x = int(input(f"L1[{i+1}] = "))
[Link](x)
print("Introduceți elementele pentru lista L2:")
for i in range(n):
x = int(input(f"L2[{i+1}] = "))
[Link](x)
L3 = []
L4 = []
for i in range(n):
[Link](min(L1[i], L2[i]))
[Link](1 if L1[i] == L2[i] else 0)
print("L1:", ' '.join(map(str, L1)))
print("L2:", ' '.join(map(str, L2)))
print("L3 (minime):", ' '.join(map(str, L3)))
print("L4 (egale):", ' '.join(map(str, L4)))

179
Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n, L1[100], L2[100], L3[100], L4[100];
cout << "n = ";
cin >> n;
cout << "Introduceti elementele pentru L1:\n";
for (int i = 0; i < n; i++) cin >> L1[i];
cout << "Introduceti elementele pentru L2:\n";
for (int i = 0; i < n; i++) cin >> L2[i];
for (int i = 0; i < n; i++) {
L3[i] = (L1[i] < L2[i]) ? L1[i] : L2[i];
L4[i] = (L1[i] == L2[i]) ? 1 : 0;
}
cout << "L1: ";
for (int i = 0; i < n; i++) cout << L1[i] << " ";
cout << "\nL2: ";
for (int i = 0; i < n; i++) cout << L2[i] << " ";
cout << "\nL3 (minime): ";
for (int i = 0; i < n; i++) cout << L3[i] << " ";
cout << "\nL4 (egale): ";
for (int i = 0; i < n; i++) cout << L4[i] << " ";
cout << endl;
return 0;
}

38. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și un șir de n numere întregi din intervalul [-1000,1000]. Programul
construiește o listă care să conțină numerele din șirul citit, în ordinea citirii, apoi
modifică lista eliminând toate elementele negative. Programul afișează pe ecran lista
inițială și lista modificată, ca în exemplu.
De exemplu: dacă se citesc, în această ordine, separate prin enter, valorile
5 -7 10 -3 4 -1
programul afișează:
Li: [-7, 10, -3, 4, -1]
Lf: [0, 10, 0, 4, 0]

Limbajul Python

n = int(input("n = "))
L = []
for i in range(n):
x = int(input(f"Elementul {i+1}: "))
[Link](x)
print("Lista inițială:")

180
print(' '.join(map(str, L)))
for i in range(n):
if L[i] < 0:
L[i] = 0
print("Lista după înlocuirea valorilor negative cu 0:")
print(' '.join(map(str, L)))

Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n, L[100];
cout << "n = "; cin >> n;
for (int i = 0; i < n; i++) cin >> L[i];
cout << "Li: ";
for (int i = 0; i < n; i++) cout << L[i] << " ";
for (int i = 0; i < n; i++) if (L[i] < 0) L[i] = 0;
cout << "\nLf: ";
for (int i = 0; i < n; i++) cout << L[i] << " ";
cout << "\n";
return 0;
}

39. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul n
(n<100) și care construiește o listă cu n numere citite de la tastatură. Numerele citite
sunt naturale din intervalul [0,1000]. Programul modifică lista inserând după fiecare
număr cifra sa maximă, apoi afișează lista inițială și lista modificată.
De exemplu: dacă pentru n se citește 4, iar pentru listă se citesc valorile: 12 40 5
103 se afișează
Li: [12, 40, 5, 103]
Lm: [12, 2, 40, 4, 5, 5, 103, 3]

Limbajul Python

def cifra_maxima(x):
return max(int(c) for c in str(x))

n = int(input("Introduceți n (<100): "))


Li = []
print("Introduceți cele", n, "numere (între 0 și 1000):")
for _ in range(n):
x = int(input())
[Link](x)
Lm = []

181
for num in Li:
[Link](num)
[Link](cifra_maxima(num))
print("Li:", Li)
print("Lm:", Lm)

Limbajul C/C++
#include <iostream>
using namespace std;

int suma_cifre(int x) {
int s = 0;
while (x > 0)
{s += x % 10;
x /= 10;
}
return s;
}

int main() {
int n, x, int Li[100], Lm[200], j = 0, i;
cout << "n = ";
cin >> n;
for (i = 0; i < n; i++) cin >> Li[i];
cout << "Li: ";
for (int i = 0; i < n; i++)
cout << Li[i] << " "; // Afișăm lista inițială
cout << "\n";
for (i = 0; i < n; i++) {
Lm[j++] = L[i]; Lm[j++] = suma_cifre(L[i]);
}
cout << "\nLi: ";
for (int i = 0; i < j; i++)
cout << Lm << " ";
return 0;
}

40. Scrieți un program Python/C++ care citește de la tastatură un număr natural nenul
par n (n<100) și n numere întregi din intervalul [-1000,1000]. Programul
construiește o listă L1 care să conțină cele n numere, în ordinea citirii, apoi
construiește o nouă listă L2 cu elementele primei liste în ordinea L1[0], L1[n-1],
L1[1], L1[n-2], L1[2], L1[n-3],...etc. Programul afișează pe ecran cele
două liste create, pe linii separate, ca în exemplu.
De exemplu: dacă se citesc, în această ordine, separate prin enter, valorile
6 1 2 3 4 5 6
programul afișează:
Li: 1 2 3 4 5 6
Lf: 1 6 2 5 3 4

182
Limbajul Python
n = int(input("n= "))
L1 = []
for i in range(n):
print
x = int(input("L1["+str(i)+"]="))
[Link](x)
L2 = []
for i in range(n // 2):
[Link](L1[i])
[Link](L1[n - 1 - i])
print("L1:", *L1)
print("L2:", *L2)

Limbajul C/C++

#include <iostream>
using namespace std;
int main() {
int n, L1[100], L2[100], i, k=0;
cout << "n= "; cin >> n;
for (int i = 0; i < n; i++)
{ cout<<"L1["<<i<<"]="; cin>>L1[i]; }
for (int i = 0; i < n / 2; i++) {
L2[k++] = L1[i];
L2[k++] = L1[n - 1 - i]; }
cout << "L1:";
for (int i = 0; i < n; i++) cout << " " << L1[i];
cout << endl << "L2:";
for (int i = 0; i < n; i++) cout << " " << L2[i];
cout << endl;
return 0;
}

41. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


(5<n<2025) și un șir de n numere naturale din intervalul [1,10000], reprezentând
punctajele celor n elevi participanți la corcursul de proiecte științifice. La acest concurs
au fost acordate de către comisie premii speciale pentru elevii care au punctaj
perfect. Un punctaj este perfect dacă numărul format din prima cifră și cifra zecilor
este un număr pătrat perfect și numărul este cu exact patru cifre. Afișați pe primul
rând, punctajele primilor 5 elevi premiați la concurs, cu un spațiu între punctaje,
respectiv numărul premiilor speciale acordate de către comisie pe rândul următor.
Exemplu: dacă se citesc, în această ordine, separate prin enter, respectiv prin câte
un spațiu, valorile
10
2985 1016 9031 3006 7123 7894 8031 685 8881 644
Se va afișa
9031 8881 8031 7894 7123
5

183
Limbajul Python
import math
n=int(input())
v=list(map(int, input().split()))
nr=0
for x in v:
if x>999 and x<=9999:
y=(x//1000)*10+x%10
rady = int([Link](y))
if rady*rady==y:
nr=nr+1
[Link](reverse=True)
print(*v[:5])

#v[:5] – selectează primele 5 elemente (sau mai puține dacă lista are
#mai puțin de 5)
#* – „despachetează” lista astfel încât valorile să fie afișate
#spațiate, nu ca o listă între paranteze.

print(nr)

Limbajul C/C++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ int n,v[2025],i,j,nr=0,y,rady;
cin>>n;
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n-1;i++)
for(j=i+1;j<n-1;j++)
if(v[i]<v[j])
{
int aux=v[i];
v[i]=v[j];
v[j]=aux;
}
for(i=0;i<5;i++)
cout<<v[i]<<" ";
cout<<endl;
for(i=0;i<n;i++)
{ if(v[i]>999 && v[i]<10000)
{ y=(v[i]/1000)*10+v[i]%10;
rady = int(sqrt(y));
if (rady*rady==y) nr=nr+1;
}
}
cout<<nr;
return 0;
}

184
42. Scrieți un program Python/C++ care citește de la tastatură un număr natural n
(5<n<2025) și un șir de n numere naturale din intervalul [1,10000], reprezentând
punctajele celor n sportivi participanți la jocurile olimpice de vară. La această
olimpiadă au fost acordate de către organizatori premii surpriză pentru sportivii care au
primcod. Un sportiv are primcod dacă suma cifrelor punctajului obțint este un număr
prim. Afișați pe primul rând, punctajele obținute de sportivi, în ordine crescătoare a
puncatjelor, cu un spațiu între punctaje, respectiv numărul premiilor surpriză acordate
de către comisie pe rândul următor.
Exemplu: dacă se citesc, în această ordine, separate prin enter, respectiv prin câte
un spațiu, valorile
10
2985 1016 9031 3006 7123 7894 8031 685 8881 644
Se va afișa
644 685 1016 2985 3006 7123 7894 8031 8881 9031
3
Limbajul Python
def este_prim(x):
if x < 2:
return False
for d in range(2, int(x ** 0.5) + 1):
if x % d == 0:
return False
return True

n = int(input(""))
v = list(map(int, input().split()))

# Sortare crescatoare
[Link]()

# Afisare lista sorata fara paranteze


print(*v)

# Calculez suma cifrelor fiecarui element al listei


nr = 0
for x in v:
s = sum(int(cifra) for cifra in str(abs(x)))
# verific daca suma cifrelor este nr prim
if este_prim(s):
nr += 1
print(nr)
Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{ int n,v[2025],i,j,nr=0,aux,c,s,k;
cin>>n;
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(v[i]>v[j])
{ aux=v[i];
v[i]=v[j];
v[j]=aux;
}

185
for(i=0;i<n;i++)
cout<<v[i]<<" ";
cout<<endl;
for(i=0;i<n;i++)
{
c=v[i];
s=0;
while(c)
{
s=s+c%10; c=c/10;
}
k=1;
for(j=2;j*j<=s&&k==1;j++)
if(s%j==0)
k=0;
if (k) nr=nr+1;
}
cout<<nr;
return 0;
}

43. Scrieți un program Python/C++ care citește de la tastatură un număr natural n


(5<n<2025) și un șir de n numere naturale din intervalul [1,10000], reprezentând
punctajele celor n șahiști participanți la campionatul național de șah. La acest
campionat au fost eliminați din competiție ultimii 5 șahiști, în funcție de obținut obținut.
Afișați pe primul rând, punctajele obținute de sportivi, în ordine crescătoare a
puncatajelor, cu un spațiu între punctaje, Pe al doilea rând afișați punctajele șahiștilor
rămăși după eliminare, cu spații între punctaje. Pe rândul a treilea afișați rezultatele
șahiștilor astfel punctajele pare ordonate crescător, iar punctajele impare descrescător,
ca în exemplu.
Exemplu: dacă se citesc, în această ordine, separate prin enter, respectiv prin câte
un spațiu, valorile:
12
2985 1016 9031 3006 7123 7894 8031 685 8881 644 7444 8888
Se va afișa:
644 685 1016 2985 3006 7123 7444 7894 8031 8881 8888 9031
7123 7444 7894 8031 8881 8888 9031
9031 7444 7894 8881 8031 8888 7123

Limbajul Python
n = int(input())
v = list(map(int, input().split()))

# Sortare manuală crescătoare (buble sort)


for i in range(n - 1):
for j in range(i + 1, n):
if v[i] > v[j]:
v[i], v[j] = v[j], v[i]

# Afișare vector sortat


print(*v)

# Elimin primele 5 elemente


if n > 5: # trebuie să avem cel puțin 5 elemente

186
for i in range(4, n):
if i + 1 < len(v):
v[i - 4] = v[i + 1]
n -= 5
v = v[:n] # redimensionăm lista la noua lungime
else:
print("Sunt prea puține elemente pentru a elimina 5 punctaje!")
v = v[:n] # în caz că nu putem elimina

# Afișare vector după eliminare


print(*v)

for i in range(n - 1):


for j in range(i + 1, n):
if v[i] > v[j] and v[i]%2==0 and v[j] % 2 == 0:
v[i], v[j] = v[j], v[i]

for i in range(n - 1):


for j in range(i + 1, n):
if v[i] < v[j] and v[i]%2==1 and v[j] % 2 == 1:
v[i], v[j] = v[j], v[i]
# Afișare vector final
print(*v)
Limbajul C/C++
#include <iostream>
using namespace std;
int main()
{ int n,v[2025],i,j,nr=0,aux;
cin>>n;
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(v[i]>v[j])
{
aux=v[i]; v[i]=v[j]; v[j]=aux;
}
for(i=0;i<n;i++) cout<<v[i]<<" ";
cout<<endl;
for(i=4;i<n;i++) v[i-4]=v[i+1];
n=n-5;
for(i=0;i<n;i++) cout<<v[i]<<' ';
cout<<endl;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(v[i]>v[j] && v[i]%2==0 &&v[j]%2==0)
{
aux=v[i]; v[i]=v[j]; v[j]=aux;
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(v[i]<v[j] && v[i]%2==1 &&v[j]%2==1)
{
aux=v[i]; v[i]=v[j]; v[j]=aux;
}
for(i=0;i<n;i++) cout<<v[i]<<" ";
return 0;
}

187
43. Scrieți un program Python/C++ care citește de la tastatură un număr natural n și cele
n cuvinte care reprezintă denumiri de fructe. Un cuvânt este format din cel mult 31 de
caractere, doar litere mici ale alfabetului englez. Programul afișează pe ecran, pe linii
separate, denumirile fructelor care încep cu litera c.
De exemplu, pentru n=5 și cuvintele:
mere
pere
prune
caise
castana programul va afișa:
- În Python
['mere', 'pere', 'prune', 'caise', 'castana']
caise
castana
- În C++
mere pere prune caise castana
caise
castana
Limbajul Python
# liste creez lista cu fructe
n=int(input("dati n= "))
fructe=[]
for i in range(0,n):
sir=input("fructul =")
[Link](sir)
print(fructe)
#afisez cuvintele care incep cu c
for i in range(0,n):
if fructe[i][0]=='c': print(fructe[i])

Limbajul C/C++
#include <iostream>
#include <cstring>
using namespace std;
int main()
{ char s[31],c,fructe[31][31];
int n,i;
cin>>n;
for(i=1; i<=n;i++)
{ cin>>s;
strcpy(fructe[i],s); cout<<fructe[i]<<" "; }
cout<<endl;
for(i=1; i<=n;i++)
if(fructe[i][0]=='c') cout<<fructe[i]<<" \n";
return 0;
}

188
VII. Fișiere Text

1. Fișierul [Link] conține, în ordine crescătoare, cel puțin două și cel mult 1000 de
numere naturale. Numerele sunt separate prin câte un spațiu și au cel mult 6 cifre
fiecare. Cel puțin un număr din fișier este par și apare o singură dată.
Scrieți un program Python/C++ care citește toate numerele din fișier și, printr-un
algoritm eficient din punctul de vedere al timpului de executare și al memoriei utilizate,
determină și afișează pe ecran, în ordine strict crescătoare, separate prin câte un
spațiu, numai numerele pare care apar o singură dată în fișier.
Exemplu: dacă fișierul conține numerele:
1 1 2 2 2 6 7 8 10 10 10 12 12 21
se afișează, în această ordine, numerele 6 8.
Limbajul Python
with open("[Link]", "r") as fin:
numere = map(int, [Link]().split())
ult=None
cnt=0
for numar in numere:
if numar==ult:
cnt += 1
else:
if ult is not None and ult % 2 == 0 and cnt == 1:
print(ult, end=" ")
ult=numar
cnt = 1
if ult is not None and ult % 2 == 0 and cnt == 1:
print(ult)
Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("[Link]");
int main()
{
int crt,ult=-1,cnt=0;
while(fin>>crt)
{
if(crt==ult) ++cnt;
else
{
if(ult%2==0 && cnt==1)
cout<<ult<<' ';
ult=crt;
cnt=1;
}
}
if(ult%2==0 && cnt==1)
cout<<ult<<' ';
[Link]();
return 0;
}

189
2. Fișierul [Link] conține pe prima linie un număr natural n (3<n<1000), iar pe
următoarea linie, un șir de n numere naturale distincte, de cel mult șase cifre fiecare.
Numerele din șir sunt separate prin câte un spațiu și cel puțin trei dintre ele sunt impare.
Scrieți un program Python/C++ care citește toate numerele din fișier și, utilizând un
algoritm eficient din punct de vedere al timpului de executare și al memoriei utilizate,
determină și afișează pe ecran cele mai mari trei numere din șir care sunt impare.
Numerele determinate sunt afișate în ordine descrescătoare, separate prin câte un
spațiu.
Exemplu: dacă fișierul conține numerele:
11
23 12 32 31 31 56 43 79 345 13 17
se afișează, în această ordine, numerele 345 79 43.
Limbajul Python
with open("[Link]", "r") as f:
n=int([Link]())
linie=[Link]().split()
max1 = max2 = max3 = -1
for x in linie:
nr=int(x)
if nr%2==1:
if nr>max1:
max3=max2
max2=max1
max1=nr
elif nr>max2:
max3=max2
max2=nr
elif nr>max3: max3=nr
print(max1,max2,max3)

Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream fin("[Link]");
int n,x,max1=-1,max2=-1,max3=-1;
fin>>n;
for(int i=0; i<n; ++i)
{ fin>>x;
if(x%2==1)
if(x>max1)
{ max3=max2; max2=max1; max1=x;}
else if(x>max2)
{ max3=max2; max2=x; }
else if(x>max3) max3=x;
}
cout<<max1<<" "<<max2<<" "<<max3;
return 0;
}

3. Scrieți un program Python/C++ care citește din fișierul [Link] două numere naturale
s1 și s2 (0<s1≤18, 0≤ s2≤18) și care afișează pe ecran cel de-al treilea numărului
natural cu exact 4 cifre, pentru care suma primelor două cifre este egală cu s1, iar
suma ultimelor două cifre este egală cu s2. Pentru determinarea numărului se utilizează

190
un algoritm eficient din punct de vedere al timpului de executare. Dacă nu există acest
număr, pe ecran se afișează mesajul imposibil.
Exemplu: dacă s1=5, iar s2=7, atunci se afișează 1425 (primele trei numere sunt 1407
1416 1425).

Limbajul Python
with open("[Link]","r") as f:
s1,s2=map(int,[Link]().split())
cnt=0
for a in range(1,10):
if a>s1:break
b=s1-a
if 0<=b<=9:
for c in range(0,10):
if c>s2: break
d=s2-c
if 0<=d<=9:
n=a*1000+b*100+c*10+d
cnt+=1
if cnt==3:
print(n)
exit()
print("imposibil")

Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{ ifstream f("[Link]");
int s1,s2,cnt=0;
f>>s1>>s2;
for(int a=1; a<=9&&a<=s1; ++a)
{ int b=s1-a;
if(b>=0&&b<=9)
for(int c=0; c<=9&&c<=s2; ++c)
{ int d=s2-c;
if(d>=0&&d<=9)
{ int n=a*1000+b*100+c*10+d;
++cnt;
if(cnt==3)
{ cout<<n<<endl; return 0; }
}
}
}
cout<<"imposibil";
return 0;
}

4. Fișierul [Link] conține un șir de cel puțin 11 și cel mult o mie de numere naturale,
separate prin câte un spațiu. Fiecare număr are cel puțin două și cel mult șase cifre.
Primul termen al șirului are numărul de ordine 1, al doilea are numărul de ordine 2 etc.
Scrieți un program Python/C++ care citește șirul din fișier și, utilizând un algoritm
eficient din punctul de vedere al timpului de executare, determină și afișează pe ecran
numărul de ordine al unui termen al șirului care este precedat în fișier de un număr
maxim de valori care au cifra unităților egală cu a sa. Dacă sunt mai mulți termeni cu
această proprietate, se afișează numărul de ordine doar al unuia dintre ei.

191
Exemplu: dacă fișierul [Link] conține numerele 21 63 256 81 193 91 23
43 121 41 86 pe ecran se afișează 10 (numărul de ordine al termenului 41).
Limbajul Python
with open("/[Link]","r") as f:
frecv=[0]*10
maxim=-1
poz=-1
i=0
for linie in f:
for val in [Link]():
x=int(val)
uc=x%10
i+=1
if frecv[uc]>maxim:
maxim=frecv[uc]
poz=i
frecv[uc]+=1
print(poz)
Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
ifstream fin("[Link]");
int x,frecv[10]= {0},maxim=-1,poz=-1,i=0;
while(fin>>x)
{
int uc=x%10;
++i;
if(frecv[uc]>maxim)
{
maxim=frecv[uc];
poz=i;
}
++frecv[uc];
}
cout<<poz;
return 0;
}

5. Fiind date două numere a şi b, îl numim pe a sufix al lui b dacă a este egal cu b sau
dacă b se poate obţine din a prin alipirea la stânga a unor noi cifre. Exemplu: 17 este
sufix al lui 17, iar 45 este sufix al lui 78145.
Fişierul [Link] conţine pe prima linie un număr natural x, cu exact două cifre, iar pe a
doua linie un şir de cel puţin două şi cel mult 1000 de numere naturale cu cel mult șase
cifre. Numerele din şir sunt separate prin câte un spaţiu.
Scrieți un program Python/C++ care să afişeze pe ecran al doilea termen al şirului care
are ca sufix numărul x. Dacă în șir nu există cel puțin două asemenea valori, pe ecran
se afişează mesajul nu exista. Pentru determinarea numărului cerut se utilizează un
algoritm eficient din punctul de vedere al memoriei şi al timpului de executare.
Exemplu: dacă fişierul [Link] are conținutul
45
3445 89312 1245 12 67120 31345 123457 atunci pe ecran se afişează 1245.

192
Limbajul Python
with open("[Link]","r") as f:
x=int([Link]())
cnt=0
for val in [Link]().split():
n=int(val)
if n%100==x : cnt+=1
if cnt==2:
print(n)
exit()
print("nu exista")

Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
ifstream fin("[Link]");
int x,cnt=0,n;
fin>>x;
while(fin>>n)
if(n%100==x)
{
++cnt;
if(cnt==2)
{
cout<<n;
return 0;
}
}
cout<<"nu exista";
return 0;
}

6. Numim secvență egală a unui șir de numere naturale un subșir al acestuia, format din
termeni pari cu aceeași valoare, aflați pe poziții consecutive în șirul dat. Lungimea
secvenței este egală cu numărul de termeni ai acesteia.
Fișierul [Link] conține un șir de cel puțin două și cel mult o mie de numere naturale
din intervalul [0, 106]. Numerele sunt separate prin câte un spațiu, iar în șir există cel
puțin doi termeni egali pe poziții consecutive.
Scrieți un program Python/C++ care să determine o secvență egală de lungime maximă
în șirul aflat în fișier și să afișeze pe ecran lungimea acestei secvențe și, pe o linie nouă,
separați prin câte un spațiu, termenii acesteia. Dacă sunt mai multe astfel de secvențe,
se afișează doar termenii primei dintre acestea, iar dacă nu există nicio asemenea
secvență se afișează mesajul lipsa pare. Pentru determinarea numerelor cerute se
utilizează un algoritm eficient din punctul de vedere al memoriei necesare și al timpului
de executare.
Exemplu: dacă fişierul [Link] conţine numerele
5 5 5 2 2 2 2 7 7 3 3 3 3 3 8 8 8 8 1 1 8 8 8 8
atunci pe ecran se afișează valorile
4
2 2 2 2

193
Limbajul Python
with open("[Link]") as f:
val_crt=-1
Lg_crt=0
Val=-1
LgMax=0
gasit=False
for val in [Link]().split():
x=int(val)
if x%2==0:
gasit=True
if x==val_crt:
Lg_crt+=1
if Lg_crt>LgMax:
LgMax=Lg_crt
Val=val_crt
else:
val_crt=x
Lg_crt=1
else:
val_crt=-1
Lg_crt=0
if gasit:
print(LgMax)
print(" ".join([str(Val)]*LgMax))
else: print("lipsa pare")

Limbajul C/C++
#include<iostream>
#include<fstream>
using namespace std;
int main()
{ ifstream f("[Link]");
int x,val_crt=-1,Lg_crt=0,Val=-1, LgMax=0;
bool gasit=false;
while(f>>x)
{ if(x%2==0)
{ gasit=true;
if(x==val_crt)
{
Lg_crt++;
if(Lg_crt>LgMax) { LgMax=Lg_crt; Val=val_crt;}
}
else { val_crt=x; Lg_crt=1; }
}
else { val_crt=-1; Lg_crt=0; }
}
if(gasit) { cout<<LgMax<<"\n";
for(int i=0; i<LgMax; ++i) cout<<Val<<" "; }
else cout<<"lipsa pare";
return 0;
}

194
7. Fișierul [Link] conține numere naturale din intervalul [1,104]: pe prima linie
numărul n, pe a doua linie un șir de n numere ordonate strict descrescător, iar pe a treia
linie două numere, x și y (x≤y). Numerele de pe aceeași linie sunt separate prin câte
un spațiu.
Scrieți un program Python/C++ care să afișeze pe ecran cel mai mare număr din șir
care aparține intervalului [x,y]. Dacă nu există un astfel de număr, se afișează pe
ecran mesajul nu exista. Pentru determinarea numărului cerut se utilizează un
algoritm eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fișierul conține numerele
7
200 167 100 56 40 34 6
35 90
atunci pe ecran se afișează 56

Limbajul Python
with open("[Link]") as f:
n=int([Link]())
v=list(map(int,[Link]().split()))
x,y=map(int,[Link]().split())
st,dr,poz=0,n-1,-1
while st<=dr:
m=(st+dr)//2
if v[m]<=y:
poz=m
dr=m-1
else: st=m+1
if poz!=-1 and v[poz]>=x: print(v[poz])
else: print("nu exista")

Limbajul C/C++
#include<iostream>
#include<fstream>
using namespace std;
int main()
{ ifstream f("[Link]");
int n,x,y,v[1000];
f>>n;
for(int i=0; i<n; ++i)f>>v[i];
f>>x>>y;
int st=0,dr=n-1,poz=-1;
while(st<=dr)
{ int m=(st+dr)/2;
if(v[m]<=y) { poz=m; dr=m-1; }
else st=m+1;
}
if(poz!=-1&&v[poz]>=x) cout<<v[poz];
else cout<<"nu exista";
return 0;
}

195
8. Fișierul [Link] conține numere naturale din intervalul [1,104]: pe prima linie
numărul n, pe a doua linie un șir de n numere ordonate strict descrescător, iar pe a treia
linie două numere, x și y (x≤y). Numerele de pe aceeași linie sunt separate prin câte
un spațiu.
Scrieți un program Python/C++ care să afișeze pe ecran, în ordine crescătoare, toate
numerele din șir care aparțin intervalului [x,y]. Dacă nu există un astfel de număr, se
afișează pe ecran mesajul nu exista. Pentru determinarea numerelor cerute se
utilizează un algoritm eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fișierul conține numerele
7
200 167 100 56 40 34 6
35 90
atunci pe ecran se afișează 40 56

Limbajul Python
with open("[Link]") as f:
n=int([Link]())
v=list(map(int,[Link]().split()))
x,y=map(int,[Link]().split())
st,dr=0,n-1
poz_st=-1
while st<=dr:
m=(st+dr)//2
if v[m]<=y:
poz_st=m
dr=m-1
else: st=m+1
st,dr=0,n-1
poz_dr=-1
while st<=dr:
m=(st+dr)//2
if v[m]>=x:
poz_dr=m
st=m+1
else: dr=m-1
if poz_st==-1 or poz_dr==-1 or poz_st>poz_dr:
print("nu exista")
else:
for i in range(poz_dr,poz_st-1,-1):
print(v[i],end=" ")

Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{ ifstream f("[Link]");
int n,x,y,v[1000];
f>>n;
for(int i=0; i<n; ++i) f>>v[i];
f>>x>>y;
int st=0,dr=n-1,poz_st=-1;
while(st<=dr)
{ int m=(st+dr)/2;
if(v[m]<=y) { poz_st=m; dr=m-1; }
else st=m+1;
}
st=0;

196
dr=n-1;
int poz_dr=-1;
while(st<=dr)
{
int m=(st+dr)/2;
if(v[m]>=x)
{ poz_dr=m; st=m+1;}
else dr=m-1;
}
if(poz_st==-1 || poz_dr==-1 || poz_st>poz_dr)
{ cout<<"nu exista"; return 0; }
for(int i=poz_dr; i>=poz_st; --i) cout<<v[i]<<" ";
return 0;
}

9. Fişierul [Link] conţine un şir de cel mult un milion de numere întregi din intervalul
[-106,106], separate prin câte un spațiu. Scrieți un program Python/C++ care afișează
pe ecran, separate printr-un spațiu, cel mai mare număr impar și ultimul număr par din
fișier. Dacă nu există două astfel de numere, programul afișează pe ecran un mesaj
corespunzător, astfel: lipsă impar, dacă în fișier sunt doar numere pare, lipsa par
dacă înfișier sunt doar numere impare. Programul utilizează un algoritm eficient din
punctul de vedere al timpului de executare și al memoriei necesare.
Exemplu: dacă fişierul [Link] conţine numerele:
20 -5 67 89 234 -891 -4 -345 73
se afişează pe ecran 89 -4
iar dacă fișierul conține numerele 9 -3 67 -93 -357
se afişează pe ecran mesajul lipsa par.

Limbajul Python
with open("[Link]", "r") as f:
maxImpar = -10000001
ultimPar = 10000001
e_Impar = False
e_Par = False
for linie in f:
for part in [Link]():
x = int(part)
if x % 2 != 0:
if x > maxImpar:
maxImpar = x
e_Impar = True
else:
ultimPar = x
e_Par = True
if e_Impar and e_Par:
print(f"{maxImpar} {ultimPar}")
elif not e_Impar:
print("lipsa impar")
else:
print("lipsa par")

197
Limbajul C/C++
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ifstream f("[Link]");
int x,maxImpar=-10000001,ultimPar=10000001;
bool e_Impar=false;
bool e_Par=false;
while(f>>x)
{
if(x%2!=0)
{
if(x>maxImpar)
maxImpar=x;
e_Impar=true;
}
else
{
ultimPar=x;
e_Par=true;
}
}
if(e_Impar&&e_Par)
cout<<maxImpar<<" "<<ultimPar;
else if(!e_Impar)
cout<<"lipsa impar";
else
cout<<"lipsa par";
return 0;
}

10. Fişierul [Link] conţine un şir de cel mult 106 numere naturale din intervalul [1,106].
Numerele din şir sunt ordonate strict crescător şi sunt separate prin câte un spaţiu.
Scrieți un program Python/C++ care să determine valorile naturale distincte din
intervalul [pr,ult], unde pr este primul număr din fișier iar ult este ultimul număr
din fișier, care nu se găsesc în şirul menţionat mai sus. Valorile determinate se scriu în
fișierul [Link] în ordine strict crescătoare, separate prin câte un spaţiu. Dacă nu
există astfel de valori, se scrie în fișier mesajul complet. Pentru determinarea valorilor
cerute se utilizează un algoritm eficient din punctul de vedere al memoriei şi al timpului
de executare.
Exemplu: dacă fişierul [Link] conţine numerele: 3 4 6 8 11 18 22
în fișierul [Link] sunt scrise valorile:
5 7 9 10 12 13 14 15 16 17 19 20 21

Limbajul Python
fin=open("[Link]","r")
fout=open("[Link]","w")
linie=[Link]()
gasit=False
it=iter([Link]())
a=int(next(it))

198
for s in it:
x=int(s)
for i in range(a+1,x):
[Link](str(i)+" ")
gasit=True
a=x
if not gasit: [Link]("complet")
[Link]()
[Link]()

Limbajul C/C++
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ifstream fin("[Link]");
ofstream fout("[Link]");
int x,a;
bool gasit=false;
fin>>a;
while(fin>>x)
{ for(int i=a+1; i<x; ++i)
{ fout<<i<<" "; gasit=true; }
a=x;
}
if(!gasit)
fout<<"complet";
return 0;
}

11. Fişierele [Link] și [Link] conţin câte un şir de n numere naturale din intervalul
[1,106]. Numerele din fișiere sunt separate prin câte un spaţiu. Scrieți un program
Python/C++ care citește de la tastatură valoarea lui n, apoi scrie în fișierul [Link]
valorile naturale obținute din însumarea valorilor aflate pe poziții omoloage în fișierele
[Link] și [Link]. Valorile determinate se scriu separate prin câte un spaţiu.
Pentru determinarea valorilor cerute se utilizează un algoritm eficient din punctul de
vedere al memoriei şi al timpului de executare.
Exemplu: pentru n=4, dacă fişierul [Link] conţine numerele: 3 6 8 10, iar fişierul
[Link] conţine numerele: 9 11 1 15
în fișierul [Link] sunt scrise valorile: 12 17 9 25

Limbajul Python
# Citește valoarea n de la tastatură: numărul de perechi de numere care
vor fi procesate
n=int(input())
# se deschid fișierele "[Link]" și "[Link]" în modul citire

199
f1=open("[Link]","r")
f2=open("[Link]","r")
fout=open("[Link]","w") #se deschide fișierul "[Link]" pentru scriere
i=0 # inițializare contorul
# se repetă pentru fiecare pereche de numere (de la 0 la n-1)
while i<n:
numar1="" # citire caracter cu caracter din f1 până
se obține numărul
while True:
c=[Link](1) # citește un caracter
if not c: break # dacă s-a ajuns la sfârșitul fișierului
if [Link](): # dacă e spațiu
if numar1!="": break # dacă s-a format număr1
else:numar1+=c # se adaugă cifra la număr1
a=int(numar1) # se transformă șirul în număr întreg
numar2="" # la fel pentru fișierul f2
while True:
c=[Link](1)
if not c: break
if [Link]():
if numar2!="": break
else: numar2+=c
b=int(numar2)
# se scrie suma celor două numere în fișierul fout, urmată de un spațiu
[Link](str(a+b)+" ")
i+=1 # se trece la următoarea pereche
# se închid toate fișierele
[Link]()
[Link]()
[Link]()

Limbajul C/C++
#include<iostream> // pentru cin și cout
#include<fstream> // pentru ifstream și ofstream
using namespace std;
int main()
{ int n,a,b; // n - numărul de perechi de numere de citit, a și b - valorile citite
cin>>n; // se citește de la tastatură valoarea lui n
ifstream f1("[Link]"); // se deschide fișierul [Link] pentru citire
ifstream f2("[Link]"); // se deschide fișierul [Link] pentru citire
ofstream fout("[Link]");// se deschide fișierul [Link] pentru scriere
for(int i=0;i<n;++i) // pentru fiecare poziție de la 0 la n-1
{ f1>>a; // se citește un număr din primul fișier
f2>>b; // se citește un număr de pe aceeași poziție din al doilea fișier
fout<<a+b<<" "; // se scrie suma celor două numere în fișierul de ieșire, cu spațiu
}
return 0;
}

200
12. Scrieți un program Python/C++ care citește din fișierul [Link] propoziții, scrise în
fișier pe câte o linie. Programul scrie în fișierul [Link] doar propozițiile care
conțin cel puțin o dată cuvântul „onoare” (indiferent de majuscule sau minuscule).
Propozițile sunt formate din cel mult 256 de caractere.
Exemplu: [Link] [Link]
Am luptat cu onoare. Am luptat cu onoare.
Am câștigat o bătălie. Onoarea este totul.
Onoare si forta!
Limbajul Python

with open("[Link]", "r") as fin, open("[Link]", "w") as fout:


for linie in fin:
linie_strip = [Link]()
# căutăm cuvântul 'onoare' indiferent de majuscule
if 'onoare' in linie_strip.lower().split():
[Link](linie)
Limbajul C/C++

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
void toLower(char dest[], char sir[]) {
int i = 0;
strcpy(dest, sir);
while (dest[i]!='\0') { dest[i] = tolower(dest[i]); i++;}
}
bool contine_onoare(char linie[]) {
char linie_mica[300]; toLower(linie_mica, linie);
return strstr(linie_mica, "onoare") != NULL; }
int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");
char linie[300];
while ([Link](linie, 300))
if (contine_onoare(linie)) fout << linie << '\n';
return 0;
}

13. Scrieți un program Python/C++ care citește din fișierul [Link] un șir de n numere
naturale (n<1000), fiecare reprezentând luminozitatea unei stele. Programul va scrie în
[Link] toate valorile pare în ordine inversă.
Exemplu: [Link]: 8 3 4 2 7 6 ; [Link]: 6 2 4 8
Limbajul Python
f = open("[Link]", "r")
linie = [Link]()
[Link]()
numere = [Link]()
i = len(numere) - 1

201
g = open("[Link]", "w")
while i >= 0:
x = int(numere[i])
if x % 2 == 0: [Link](str(x) + " ")
i = i - 1
[Link]()

Limbajul C++
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");
int v[1000], n = 0, x;
while (fin >> x)
if (x % 2 == 0)
v[n++] = x; // salvăm doar numerele pare
for (int i = n - 1; i >= 0; i--) fout << v[i] << " ";
return 0;
}

14. Scrieți un program Python/C++ care citește din fișierul [Link], n numere. O cheie
secretă este activată doar dacă cel mai mare număr prim din șir este egal cu suma
tuturor celorlalte numere prime.
Programul va scrie în [Link] mesajul CHEIE ACTIVATĂ sau EROARE.

Exemplu [Link]: [Link]:


6 CHEIE ACTIVATĂ
3 5 7 2 17
deoarece 17 = 3 + 5 + 7 + 2
Limbajul Python
def este_prim(x):
if x < 2: return False
for d in range(2, int(x**0.5) + 1):
if x % d == 0: return False
return True
with open("[Link]", "r") as f:
numere = list(map(int, [Link]().split()))
maxim_prim = -1
suma = 0
for x in numere:
if este_prim(x):
if x > maxim_prim:
maxim_prim = x
suma += x
if maxim_prim != -1 and suma - maxim_prim == maxim_prim:
mesaj = "CHEIE ACTIVATĂ"
else: mesaj = "EROARE"
with open("[Link]", "w") as g: [Link](mesaj)

202
Limbajul C/C++
#include <fstream>
using namespace std;
bool estePrim(int x) {
if (x < 2) return false;
for (int d = 2; d * d <= x; ++d)
if (x % d == 0) return false;
return true;
}
int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");
int x, maxim = -1, suma = 0;
while (fin >> x) {
if (estePrim(x)) {
if (x > maxim) maxim = x;
suma += x; }
}
if (maxim != -1 && suma - maxim == maxim) fout << "CHEIE ACTIVATĂ";
else fout << "EROARE";
return 0;
}

15. Scrieți un program Python/C++ care citește din fișierul [Link] o matrice n×m (n,
m ≤ 100) cu temperaturi magice. Programul va scrie în [Link] temperatura
maximă din fiecare coloană, fiecare pe câte o linie.
Exemplu [Link]: [Link]:
3 3 4
1 5 2 8
3 8 6 7
4 4 7
Limbajul Python

with open("[Link]", "r") as f:


n, m = map(int, [Link]().split())
matrice = [list(map(int, [Link]().split())) for _ in range(n)]
with open("[Link]", "w") as g:
for col in range(m):
maxim = matrice[0][col]
for lin in range(1, n):
if matrice[lin][col] > maxim:
maxim = matrice[lin][col]
[Link](str(maxim) + "\n")
Limbajul C/C++

#include <fstream>
using namespace std;
int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");

203
int n, m;
fin >> n >> m;
int a[101][101];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) fin >> a[i][j];
for (int j = 0; j < m; j++) {
int maxim = a[0][j];
for (int i = 1; i < n; i++)
if (a[i][j] > maxim) maxim = a[i][j];
fout << maxim << '\n';
}
return 0;
}

16. Scrieți un program Python/C++ care citește din fișierul [Link] o matrice pătratică
n×n. Programul va scrie în [Link] mesajul SIMETRICA dacă matricea este
simetrică față de diagonala principală, altfel va scrie NU ESTE SIMETRICA.
Exemplu: [Link]: [Link]
3 SIMETRICA
1 2 3
2 4 5
3 5 6
Limbajul Python
with open("[Link]", "r") as f:
n = int([Link]())
mat = [list(map(int, [Link]().split())) for _ in range(n)]
simetrica = True
for i in range(n):
for j in range(i):
if mat[i][j] != mat[j][i]:
simetrica = False
break
with open("[Link]", "w") as f:
if simetrica: [Link]("SIMETRICA")
else: [Link]("NU ESTE SIMETRICA")

Limbajul C/C++

#include <fstream>
using namespace std;
int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");
int n;
fin >> n;
int a[100][100];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) fin >> a[i][j];

204
bool simetrica = true;
for (int i = 0; i < n && simetrica; i++) {
for (int j = 0; j < i; j++)
if (a[i][j] != a[j][i])
{ simetrica = false; break; }
}
if (simetrica)fout << "SIMETRICA";
else fout << "NU ESTE SIMETRICA";
return 0;
}

17. Scrieți un program Python/C++ care citește din fișierul [Link] o matrice pătratică
de dimensiune n×n. Programul va scrie în fișierul [Link] toate elementele de pe
conturul matricei (prima și ultima linie, prima și ultima coloană), în ordinea parcurgerii în
sensul acelor de ceasornic, pe o singură linie.
Exemplu: [Link] [Link]
4 1 2 3 4 8 12 16 15 14 13 9 5
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Limbajul Python

with open("[Link]") as f:
n = int([Link]())
a = [list(map(int, [Link]().split())) for _ in range(n)]
rez = []
# sus
for j in range(n):
[Link](a[0][j])
# dreapta
for i in range(1, n - 1):
[Link](a[i][n - 1])
# jos
for j in range(n - 1, -1, -1):
[Link](a[n - 1][j])
# stanga
for i in range(n - 2, 0, -1):
[Link](a[i][0])
with open("[Link]", "w") as f:
[Link](" ".join(str(x) for x in rez))

Limbajul C/C++
#include <fstream>
using namespace std;

int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");

int n;
fin >> n;
int a[100][100];

205
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
fin >> a[i][j];
}
}
// Prima linie
for (int j = 0; j < n; j++) fout << a[0][j] << " ";
// Ultima coloană (fără primul și ultimul element)
for (int i = 1; i < n - 1; i++) fout << a[i][n - 1] << " ";
// Ultima linie (de la dreapta la stânga)
for (int j = n - 1; j >= 0; j--) fout << a[n - 1][j] << " ";
// Prima coloană (de jos în sus, fără colțuri)
for (int i = n - 2; i > 0; i--) fout << a[i][0] << " ";
return 0;
}
18. Scrieți un program în Python/C++ care citește din fișierul [Link] un număr natural
n. Un cavaler poate trece poarta doar dacă numărul său are exact 3 divizori pozitivi
(inclusiv 1 și el însuși). Programul va scrie în fișierul [Link] mesajul POARTA SE
DESCHIDE dacă regula este respectată sau RAMANE INCHISA în caz contrar.
Limbajul Python
def este_prim(x):
if x < 2:
return False
for d in range(2, int(x**0.5) + 1):
if x % d == 0:
return False
return True

with open("[Link]", "r") as f:


n = int([Link]())

rad = int(n ** 0.5)


with open("[Link]", "w") as f:
if rad * rad == n and este_prim(rad):
[Link]("POARTA SE DESCHIDE")
else:
[Link]("RAMANE INCHISA")

Limbajul C/C++
#include <fstream>
#include <cmath>
using namespace std;

bool estePrim(int x) {
if (x < 2) return false;
for (int d = 2; d * d <= x; d++) {
if (x % d == 0) return false;
}
return true;
}

206
int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");
int n;
fin >> n;
int rad = sqrt(n);
if (rad * rad == n && estePrim(rad))fout << "POARTA SE DESCHIDE";
else fout << "RAMANE INCHISA";
return 0;
}

19. Scrieți un program în Python/C++ care citește din fișierul [Link] un un număr
natural n și șir de n numere naturale. Programul va determina și scrie în [Link]
poziția elementului cu valoarea maximă. Dacă apar mai multe, se scrie doar prima.
Exemplu: [Link]: [Link]
7 2
3 9 2 9 1 5 7

Limbajul Python
with open("[Link]") as f:
n = int([Link]())
nums = list(map(int, [Link]().split()))

max_val = nums[0]
max_pos = 1
for i in range(1, n):
if nums[i] > max_val:
max_val = nums[i]
max_pos = i + 1 # poziție 1-based
with open("[Link]", "w") as f:
[Link](str(max_pos))

Limbajul C/C++
#include <fstream>
using namespace std;

int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");
int n, x, max_val = -1, max_pos = 0;
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> x;
if (x > max_val) {
max_val = x;
max_pos = i; // salvăm prima poziție }
}

fout << max_pos;


return 0;
}

20. Scrieți un program în Python/C++ care citește din fișierul [Link] un număr natural
n și un șir de n numere naturale. Programul va scrie în [Link] toate numerele
care sunt egale cu suma cifrelor lor ridicate la puterea poziției lor în șir.

207
Exemplu: [Link] [Link]:
3 8 81
8 17 81
(8^1 = 8, 8+1=9 → 9^2=81)

Limbajul Python
def suma_cifre(x):
s = 0
while x > 0:
s += x % 10
x //= 10
return s
with open("[Link]") as f:
n = int([Link]())
v = list(map(int, [Link]().split()))
rez = []
for i in range(n):
suma = suma_cifre(v[i])
if suma ** (i + 1) == v[i]: [Link](str(v[i]))
with open("[Link]", "w") as f: [Link](" ".join(rez))

Limbajul C/C++
#include <fstream>
#include <cmath>
using namespace std;
int suma_cifre(int x) {
int s = 0;
while (x)
{ s += x % 10; x /= 10; }
return s;
}
int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");
int n, x;
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> x;
int suma = suma_cifre(x);
if (pow(suma, i) == x) fout << x << " ";
}
return 0;
}

21. Scrieți un program în Python/C++ care citește din fișierul [Link] un număr
natural n și un șir de n numere naturale (n<=100) Programul va calcula suma
pătratelor valorilor care sunt divizibile cu 3 și va scrie rezultatul în fișierul
[Link].
Exemplu: [Link] [Link]
5 342
6 4 9 11 15

208
(6² + 9² + 15² = 36 + 81 + 225)

Limbajul Python
# Deschidem fișierul pentru citire
with open("pă[Link]", "r") as f: n_and_values = [Link]().split()
n = int(n_and_values[0])
values = list(map(int, n_and_values[1:]))
suma = 0
for x in values:
if x % 3 == 0: suma += x * x
# Scriem rezultatul în fișierul de ieșire
with open("pă[Link]", "w") as f: [Link](str(suma))

Limbajul C/C++
#include <fstream>
using namespace std;
int main() {
ifstream fin("pă[Link]");
ofstream fout("pă[Link]");
int n, x; long long suma = 0;
fin >> n;
for (int i = 0; i < n; i++) {
fin >> x;
if (x % 3 == 0) suma += x * x;
}
fout << suma;
return 0;
}

22. Fişierul [Link] conţine un şir de cel mult un milion de numere întregi din intervalul
[-106,106], separate prin câte un spațiu. Scrieți un program Python/C++ care
afișează pe ecran, în câte zerouri se termină produsul numerelor din fișier.
Exemplu: dacă fişierul [Link] conţine numerele 20 25 32 7 6 125 35 36 se afişează
pe ecran 7
Limbajul Python
f=open('[Link]','r')
cinci=0
doi=0
for line in f:
for x_str in [Link]():
x=int(x_str)
while x%5==0:
cinci+=1
x//= 5
while x%2==0:
doi+=1
x//=2
if doi<cinci: print(doi)
else: print(cinci)
[Link]()

209
Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("[Link]");
int main()
{ int x,cinci=0,doi=0;
while(f>>x)
{ while(x%5==0) { cinci++; x=x/5; }
while(x%2==0) { doi++; x=x/2; } }
if(doi<cinci) cout<<doi;
else cout<<cinci;
[Link]();
return 0;}

23. Fişierul [Link] conţine un şir de cel mult un milion de numere întregi din intervalul
[-106,106], separate prin câte un spațiu. Scrieți un program Python/C++ care
afișează pe ecran, mesajul "Da" dacă șirul din fișier este zig-zag sau mesajul "Nu" în
caz contrar.
Un șir se numește zig-zag dacă oricare ar fi 3 elemente consecutive din șir nu sunt în
ordine crescătoare sau descrescătoare.
Exemplu: dacă fişierul [Link] conţine numerele 20 25 32 7 6 125 35 36 se
afişează pe ecran 7

Limbajul Python
Python
f=open('[Link]', 'r')
x=int([Link]())
y=int([Link]())

ok=0
nr=0
for line in f:
for z_str in [Link]():
z=int(z_str)
if (x<y and y>z) or (x>y and y<z):
ok+=1
x=y
y=z
nr+=1
if ok==nr: print("Da")
else: print("Nu")
[Link]()

Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("[Link]");
int main()
{ int x,y,z,ok=0,nr=0;
f>>x;

210
f>>y;
while(f>>z)
{ if(x<y && y>z) ok++;
if(x>y && y<z) ok++;
nr++; x=y; y=z;
}
if(ok==nr) cout<<"Da";
else cout<<"Nu";
return 0;
}

24. Fişierul [Link] conţine un număr natural n urmat de n linii pe care se află perechi
(x,y) de numere întregi din intervalul [-104,104]ce reprezintă coordonatele unor
puncte în planul XoY. Scrieți un program Python/C++ care afișează pe ecran pătratul
razei celui mai mic cerc care conține toate punctele citite din fișier.
Exemplu: dacă fişierul [Link] conţine numerele
5
5 3
7 6
4 4
6 3
7 1
se afişează pe ecran 85
Limbajul Python

with open('[Link]', 'r') as f:


n=int([Link]())
maxim=0
for _ in range(n):
line = [Link]()
x_str, y_str = [Link]()
x=int(x_str)
y=int(y_str)
d=x*x +y*y
if d>maxim:
maxim=d
print(maxim)

Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("[Link]");
int main()
{ int n,x,y,i,d,maxim=0;
f>>n;
for(i=1;i<=n;i++)
{ f>>x>>y; d=x*x+y*y;
if(maxim<d) maxim=d; }
cout<<maxim;
[Link](); return 0; }

211
25. Fişierul [Link] conţine un şir de litere mici din alfabetul englez, separate prin câte un
spațiu. Scrieți un program Python/C++ care afișează pe ecran, care literă apare de
cele mai multe ori. Dacă sunt mai multe litere care apar de număr maxim de ori se va
afișa prima în ordine alfabetică.
Exemplu: dacă fişierul [Link] conţine lieterele a e f s e f d a e f f r e t se
afişează pe ecran e

Limbajul Python

with open("[Link]", "r") as f:


v=[0]*26
maxim=0
lit='a'
nr=0
for line in f:
for x in line:
nr+=1
if nr%2==1: v[ord(x)-ord('a')]+= 1
for i in range(26):
if maxim<v[i]:
maxim=v[i]
lit=chr(i+ord('a'))
print(lit)

Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("[Link]");
int main()
{ int v[26] = {0};
int maxim = 0,i;
char x,lit;
while(f>>x) v[x-'a']++;
for(i=0;i<26;i++)
if(maxim<v[i]) {maxim=v[i]; lit=char(i+'a');}
cout<<lit;
[Link]();
return 0;
}

26. Fişierul [Link] conţine un număr de maxim 1.000.000 cifre. Scrieți un program
Python/C++ care afișează pe ecran, mesajul "Da" numărul din fișier este devizibil cu 3
sau mesajul "Nu" în caz contrar.
Exemplu: dacă fişierul [Link] conţine numărul 324531231 se afişează pe ecran Da

Limbajul Python
with open("[Link]", "r") as f:
s=0
while True:
x=[Link](1)
if not x: break
if [Link](): s+=int(x)
if s%3==0: print("Da")
else: print("Nu")

212
Limbajul C/C++

#include <iostream>
#include <fstream>
using namespace std;
ifstream f("[Link]");
int main()
{
char x;
long long s=0;
while([Link](x))
s=s+x-'0';
if(s%3==0) cout<<"Da";
else cout<<"Nu";
}

e) Fişierul [Link] conţine un număr de maxim 1000000 cifre. Scrieți un program


27.
Python/C++ care afișează pe ecran, mesajul "Nu" dacă cifrele numărului din fișier nu
pot fi rearanjate astfel încât să formeze un număr palindrom sau dacă se pot aranja
astfel încât să formeze un număr palindrom să afișeze cel mai mare număr care se
poate forma.
Exemplu: dacă fişierul [Link] conţine numărul 2332113 se afişează pe ecran
3213123
Limbajul Python
with open("[Link]", "r") as f:
v=[0]*10
nr=0
mij=-1
data = [Link]()
for x in data:
if [Link]():
v[int(x)]+= 1
for i in range(10):
if v[i]%2==1:
nr+=1
mij=i
v[i]-=1
if nr>1:
print("Nu")
else:
for i in range(9,-1,-1):
for j in range(1,v[i]//2+1):
print(i, end='')
if mij!=-1:
print(mij, end='')
for i in range(10):
for j in range(1,v[i]//2+1):
print(i, end='')
print()

213
Limbajul C/C++

#include <iostream>
#include <fstream>
using namespace std;
ifstream f("[Link]");
int main()
{
char x,nr=0;
int v[10]={0},i,j,mij=-1;
while([Link](x)) v[x-'0']++;
for(int i=0;i<=9;i++)
if(v[i]%2==1) { nr++; mij=i; v[i]--; }
if(nr>1) cout<<"Nu";
else
{ for(i=9;i>=0;i--)
for(j=1;j<=v[i]/2;j++) cout<<i;
if(mij!=-1) cout<<mij;
for(i=0;i<=9;i++) for(j=1;j<=v[i]/2;j++) cout<<i;
}
}

28. Se definește șir monoton-consecutiv un șir de numere naturale nenule ordonate


crescător, care au proprietatea că diferența, în valoare absolută, dintre oricare două
numere situate pe poziții consecutive, este cel mult 1. Lungimea unui șir monoton-
consecutiv este egală cu numărul de numere din șir. De exemplu, numerele 2, 2,
2, 3, 4, 4, 5 formează un șir monoton-consecutiv. Lungimea acestui șir
monoton-consecutiv este 7. Un șir cu un singur element se consideră monoton-
consecutiv de lungime 1.
Fișierul [Link] conține un șir având cel mult 106 numere întregi din intervalul
[-1000,1000], separate prin câte un spațiu. Scrieți un program Python/C++ care,
printr-un algoritm eficient din punctul de vedere al timpului de executare, determină și
afișează pe ecran numărul minim de șiruri monoton-consecutive care se pot forma,
folosind toate numerele naturale nenule din fișier, după ordonarea crescătoare a
acestora.
Exemplu: dacă fișierul conține numerele
3 7 3 2 -8 9 7 -7 6 1
atunci șirul se ordonează crescător -8 -7 1 2 3 3 6 7 7 9 și se pot forma,
folosind toate numerele naturale nenule din fișier, minimum 3 șiruri monoton-
consecutive 1 2 3 3, 6 7 7, 9, deci pe ecran se afișează valoarea 3.
Limbajul Python
with open("[Link]", "r") as fin:
v=[0]*1001
rez=0
for val in [Link]().split():
x=int(val)
if x>0: v[x]=1
for x in range(1,1001):
if v[x]-v[x-1]>0: rez=rez+1
print(rez)

214
Limbajul C/C++
#include<iostream>
#include<fstream>
using namespace std;
int main()
{ int v[1001]={0},x,rez=0;
ifstream fin("[Link]");
while(fin>>x)
if(x>0) // numar natural nenul
v[x]=1;//se actualizeaza aparitia lui x in v
for(x=1;x<=1000;x++)//se parcurge v
if (v[x]-v[x-1]>0)//daca a aparut un nou sir
rez=rez+1;
cout<<rez;
[Link]();
return 0;
}

29. Fişierul [Link] conţine pe prima linie un număr natural nenul n, cu cel mult patru
cifre, iar pe a doua linie un şir de cel puţin două şi cel mult 100000 de numere naturale
cu cel mult șase cifre. Numerele din şir sunt separate prin câte un spaţiu.
Scrieți un program Python/C++ care afișează, pe ecran, utilizând un algoritm eficient
din punctul de vedere al timpului de executare, mesajul da dacă numerele din șir se
pot rearanja astfel încât primele poziții să fie ocupate de primele n numere naturale, sau
mesajul nu, în caz contrar
Exemplu: dacă fişierul [Link] are conținutul
4
4 2 3 5 0 1 3
atunci pe ecran se afişează da
iar dacă fişierul [Link] are conținutul
4
4 6 3 5 0 1 3
atunci pe ecran se afişează nu
Limbajul Python
with open("[Link]", "r") as fin:
n=int([Link]())
v=[0]*10000
ok=1
for val in [Link]().split():
x=int(val)
if x<n: v[x]=1
for x in range(n):
if v[x]==0:
ok=0
if ok==1: print("da")
else print("nu")

Limbajul C/C++
#include<iostream>
#include<fstream>
using namespace std;

215
int main()
{ int v[10000]={0},n,x,ok=1;
ifstream fin("[Link]");
fin>>n;
while(fin>>x)
if(x<n)
v[x]=1;
for(x=0;x<n;x++)
if (v[x]==0)
ok=0;
if (ok==1)cout<<"da";
else cout<<"nu";
[Link]();
return 0;
}

30. Fișierul [Link] conține un șir având cel puțin 2 și cel mult 1000000 numere
naturale din intervalul [0,10000], separate prin câte un spațiu. Scrieți un program
Python/C++ care, printr-un algoritm eficient din punctul de vedere al timpului de
executare și al spațiului de memorie, determină și afișează pe ecran mesajul da dacă
șirul are proprietatea că între oricare două numere x și y din șir valoarea absolută
(modulul) a diferenței lor este cel mult egală cu numărul de numere din șir, sau mesajul
nu, în caz contrar.
Exemplu: dacă fişierul [Link] conţine numerele
4 4 3 3 4 3 2
atunci pe ecran se afișează mesajul da
iar dacă fişierul [Link] conţine numerele
4 6 8
atunci pe ecran se afișează mesajul nu

Limbajul Python
with open("/[Link]") as fin:
maxi=-1
mini=10001
nr=0
for val in [Link]().split():
x=int(val)
nr=nr+1
if x<mini: mini=x
if x>maxi: maxi=x
if maxi-mini<=nr: print("da")
else: print("nu")

Limbajul C/C++
#include<iostream>
#include<fstream>
using namespace std;
int main()
{ int x,mini=10001,maxi=-1,nr=0;
ifstream fin("[Link]");

216
while(fin>>x)
{nr++;
if(x<mini) mini=x;
if(x>maxi) maxi=x;}
if (maxi-mini<=nr) cout<<"da";
else cout<<"nu";
[Link]();
return 0;
}

31. Fișierul [Link] conţine un şir având cel puțin două și cel mult 106 numere întregi din
intervalul [-106,106], separate prin câte un spaţiu. Șirul conține cel puțin două numere
naturale care sunt pătrate perfecte. Scrieți un program Python/C++ care să afișeze, pe
ecran, toți termenii șirului care sunt de tip pătrat perfect, în ordine descrescătoare, pe
linii distincte. Proiectați un algoritm eficient din punctul de vedere al timpului de
executare.
Exemplu: dacă fişierul are conţinutul
12 2 3 1 -1 2 5 16 36 1 5 0
se afişează pe ecran:
36
16
1
1
0

Limbajul Python
with open("/[Link]", "r") as fin:
v=[0]*1001
for val in [Link]().split():
x=int(val)
if x>=0:
y=int(x**0.5)
if y*y==x: v[y]=v[y]+1
for y in range(1000,-1,-1):
if v[y]>0:
for x in range(0,v[y]): print(y*y)

Limbajul C/C++
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
int main()
{ ifstream fin("[Link]");
int x,y,v[1001]={0};
while(fin>>x)
if(x>=0)
{y=int(sqrt(x));
if(y*y==x) v[y]++; }
for(y=1000;y>=0;y--)
for(x=1;x<=v[y];x++) cout<<y*y<<endl;
return 0;
}

217
32. Fișierul [Link] conține minim două și maxim 1000000 de numere naturale separate
prin câte un spaţiu, formate din cel mult 6 cifre fiecare.
Scrieți un program Python/C++ care citește numerele din fișier, apoi afișează, pe ecran,
lungimea maximă a unei secvențe de numere naturale având exact două cifre, astfel
încât una dintre cifrele numărului să fie triplul celeilalte, sau mesajul nu exista, dacă
în fișier nu există niciun astfel de număr. Definim secvență de numere un șir de numere
situate pe poziții alăturate în fișier, iar prin lungimea secvenței, numărul de numere din
care este formată secvența. O secvență poate să aibă cel puțin lungimea 1 (atunci când
are un singur element). Pentru rezolvarea cerinței, proiectați un algoritm eficient din
punctul de vedere al timpului de executare și al spațiului de memorie.
Exemplu: dacă fișierul conține numerele
13 102 31 13 31 26 100 234 39 0
atunci pe ecran se afișează 4
iar dacă fișierul conține numerele
120 102 620 234 34 0
atunci pe ecran se afișează nu exista

Limbajul Python
with open("/[Link]", "r") as fin:
lc=0
lmax=0
for val in [Link]().split():
x=int(val)
if x>=13 and x<=93:
a=x//10
b=x%10
if a*3==b or b*3==a:
lc=lc+1
if lc>lmax: lmax=lc
else: lc=0
if lmax==0: print("nu exista")
else: print(lmax)

Limbajul C/C++
#include<iostream>
#include<fstream>
using namespace std;
int main()
{ ifstream fin("[Link]");
int x,lc=0,lmax=0,a,b;
while(fin>>x)
if(x>=13 and x<=93)
{ a=x/10; b=x%10;
if(a*3==b or b*3==a)lc++;
if (lc>lmax)lmax=lc;
}
else lc=0;
if(lmax!=0) cout<<lmax;
else cout<<"nu exista";
[Link]();
return 0;
}

218
33. Fişierul [Link] conţine un şir având cel puțin două și cel mult un milion de numere
întregi din intervalul [-106,106], separate prin câte un spațiu. Scrieți un program
Python/C++ care afișează, pe ecran, mesajul: corect, dacă în fișier sunt doar numere
care au proprietatea că diferența dintre numărul de cifre a oricăror două numere situate
pe poziții alăturate este -1 sau 1, respectiv mesajul incorect, în caz contrar.
Programul utilizează un algoritm eficient din punctul de vedere al timpului de executare
și al memoriei necesare. Exemplu: dacă fişierul [Link] conţine numerele 71 1 12
-1 41 927 se afişează pe ecran corect
iar dacă fișierul [Link] conține numerele 11 1 12 -1 4
se afişează pe ecran mesajul incorect (deoarece numerele -1 și 4 au același
număr de cifre).
Limbajul Python
with open("/[Link]","r") as fin:
nr=0
ok=True
for val in [Link]().split():
nr=nr+1
if nr==1:
a=val
if a<0: a=-a
ca=str(a)
else:
b=val
if b<0: b=-b
cb=str(b)
if len(ca)-len(cb)!=1 and len(ca)-len(cb)!=-1: ok=False
ca=cb
if ok: print("corect")
else: print("incorect")

Limbajul C/C++
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
int main()
{
ifstream fin("[Link]");
int x,ca,cb,nr=0;
char a[10],b[10];
bool ok=true;
while(fin>>x)
{
nr++;
if(nr==1)
{ if(x<0) x=-x;
itoa(x,a,10);
ca=strlen(a);
}
else
{
if(x<0) x=-x;
itoa(x,b,10);

219
cb=strlen(b);
if(ca-cb!=1 and ca-cb!=-1) ok=false;
ca=cb;
}
}
if(ok) cout<<"corect";
else cout<<"incorect";
[Link]();
return 0;
}

34. Fişierul [Link] conţine un șir având cel puțin două și cel mult un milion de numere
naturale din intervalul [1,106]. Numerele din şir sunt sunt separate prin câte un spaţiu.
Scrieți un program Python/C++ care citește numerele din fișier, apoi scrie în fișierul
[Link] cel mai mare număr impar care conține cifra 9 și cel mai mic număr par care
conține cifra 0, pe linii distincte. Dacă nu există astfel de valori, se scrie în fișier mesajul
nu exista. Pentru determinarea valorilor cerute se utilizează un algoritm eficient din
punctul de vedere al memoriei şi al timpului de executare.
Exemplu: dacă fişierul [Link] conţine numerele: 12 9 134 90 821 491 82 102
în fișierul [Link] sunt scrise valorile:
491
90
Iar dacă fişierul [Link] conţine numerele: 12 9 134 901 821 491 82 12
în fișierul [Link] este scris mesajul: nu exista

Limbajul Python
fin=open("/[Link]","r")
fout=open("/[Link]","w")
maxi=0
minp=1000001
for val in [Link]().split():
a=int(val)
ca=str(a)
if a%2==0:
if '0' in ca and a<minp: minp=a

else:
if '9' in ca and a>maxi: maxi=a
if maxi!=0 and minp!=1000001: [Link](maxi,mimp)
else: [Link]("nu exista")

Limbajul C/C++
#include<fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
int main()
{ ifstream fin("[Link]");
ofstream fout("[Link]");
int x,maxi=0,minp=1000001;
char s[10];

220
while(fin>>x)
{ itoa(x,s,10);
if(x%2==0) { if(strchr(s, '0') && x<minp) minp=x;}
else
{ if(strchr(s, '9') && x>maxi) maxi=x;}
}
if(maxi!=0 && minp!=1000001) fout<<maxi<<endl<<minp;
else fout<<"nu exista";
[Link](); [Link]();
return 0;
}

35. Fişierul [Link] conţine un șir având cel puțin două și cel mult un milion de numere
naturale din intervalul [103,108]. Numerele din şir sunt sunt separate prin câte un
spaţiu. Scrieți un program Python/C++ care citește numerele din fișier, apoi afișează,
pe ecran, câte numere din fișier conțin în scrirea lor, respectând ordinea cifrelor,
valoarea 2026. Dacă nu există astfel de valori, se scrie în fișier mesajul nu exista.
Pentru determinarea valorilor cerute se utilizează un algoritm eficient din punctul de
vedere al memoriei şi al timpului de executare.
Exemplu:
dacă fişierul [Link] conţine numerele: 120263 2026 6206 20265 2000 32062
pe ecran se afișează valoarea: 3
Iar dacă fişierul [Link] conţine numerele: 1206 2602 6000 1202 8026
pe ecran se afișează mesajul: nu exista
Limbajul Python
fin=open("/[Link]","r")
cate=0
for val in [Link]().split():
s=str(val)
if "2026" in s:
cate=cate+1
if cate!=0:
print(cate)
else:
print("nu exista")

Limbajul C/C++
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
int main()
{ ifstream fin("[Link]");
int x,cate=0;
char s[10];
while(fin>>x)
{ itoa(x,s,10);
if(strstr(s, "2026")) cate++;
}
if(cate) cout<<cate;
else cout<<"nu exista";
[Link]();
return 0;
}

221
36. Scrieți un program Python/C++ care citește de la tastatură patru numere naturale n, a,
b, c, unde n este din intervalul [1,1000], iar a, b, c din intervalul [0,9]. Programul
scrie în fișierul [Link] al n-lea termen al șirului definit astfel:
f(1)=a, f(2)=b, f(3)=c,
iar dacă n>3 atunci f(n)=(f(n-1)+f(n-2)+f(n-3))%10
Pentru determinarea valorii cerute se utilizează un algoritm eficient din punctul de
vedere al memoriei şi al timpului de executare.
Exemplu: dacă se citesc de la tastaură valorile: 12 1 3 2
în fișierul [Link] este scrisă valoarea: 4
Limbajul Python

fout=open("/[Link]","w")
n,a,b,c = map(int, input().split())
if n==1: [Link](a)

if n==2: [Link](b)

if n==3: [Link](c)
if n>3:
n=n-3
while n>0:
d=(a+b+c)%10
a=b
b=c
c=d
n=n-1
[Link](d)
[Link]()
Limbajul C/C++

#include<iostream>
#include<fstream>
using namespace std;
int main()
{ ofstream fout("[Link]");
int n,a,b,c,d;
cin>>n>>a>>b>>c;
if(n==1)fout<<a;
if(n==2)fout<<b;
if(n==3)fout<<c;
if(n>3)
{ n=n-3;
while(n)
{ d=(a+b+c)%10; a=b; b=c; c=d; n--;}
fout<<d;
}
[Link]();
return 0;
}

222
37. Scrieți un program Python/C++ care citește de la tastatură trei numere naturale n, p, q,
unde n este din intervalul [1,30], iar p, q din intervalul [1,10]. Programul scrie în
fișierul [Link] numărul de cifre al celui de-al n-lea termen al șirului definit astfel:
f(n)=p, dacă n=1
f(n)=q, dacă n=2
iar dacă n>2 atunci f(n)=f(n-1)@ f(n-2),
unde @ reprezintă operația de concatenare a lui f(n-1) cu f(n-2).
Pentru determinarea valorii cerute se utilizează un algoritm eficient din punctul de
vedere al memoriei şi al timpului de executare.
De exemplu, pentru n=6, p=3 şi q=5, primii 6 termeni ai şirului sunt 3, 5, 53, 535,
53553, 53553535. Deci în fișier se scrie valoarea 8 (deoarece 53553535 are 8
cifre).
Limbajul Python Limbajul C++

fout=open("/[Link]","w") #include <iostream>


#include <fstream>
n,p,q = map(int, input().split())
using namespace std;
if p<10: a=1 int main() {
else: a=2 ofstream fout("[Link]");
if q<10: b=1 int n,p,q,a,b,c;
else: b=2 cin>>n>>p>>q;
if n==1: if(p<10) a=1; else a=2;
[Link](a)
if(q<10) b=1; else b=2;
if n==2:
if(n==1) fout<<a;
[Link](b)
if n>2: if(n==2) fout<<b;
n=n-2 if(n>2){ n=n-2;
while n>0: while (n)
c=a+b { c=a+b;
a=b a=b;
b=c
b=c;
n=n-1
n--;}
[Link](c)
[Link]() fout<<c;}
[Link]();
return 0;
}

38. Scrieți un program Python/C++ care citește din fișierul [Link] un șir de n numere
naturale, fiecare reprezentând luminozitatea unei stele.
Programul va scrie în [Link] toate valorile impare în ordine crescătoare.
De exemplu, pentru [Link] 8 3 4 2 7 6 , se va afişa în [Link] 3 7.

Limbajul Python
with open("[Link]", "r") as f:
continut = [Link]()
sir_numere = [Link]()
numere = [int(x) for x in sir_numere]
impare = []

223
for numar in numere:
if numar % 2 == 1:
[Link](numar)
[Link]()
with open("[Link]", "w") as f:
for numar in impare:
[Link](str(numar) + " ")

Limbajul C/C++

#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");
int x, v[1000], k = 0;
while (fin >> x) {
if (x % 2 == 1) {
v[k++] = x;
}
}
sort(v, v + k);
for (int i = 0; i < k; i++) {
fout << v[i] << " ";
}
return 0;
}

39. Fișierul [Link] conține un șir de cel puțin două și cel mult o mie de numere naturale
din intervalul [0,106].Numerele sunt separate prin câte un spațiu.
Scrieți un program în Python/C++ care citește șirul de numere din fișier și, utilizând un
algoritm eficient din punctul de vedere al timpului de executare calculează produsul
tuturor numerelor nenule din fișier și determină și afișează pe ecran câte dintre numere
sunt egale cu zero. Dacă în fișier nu există niciun număr nenul, se va afișa mesajul nu
exista numere nenule
De exemplu, pentru [Link]: 0 3 -2 0 1 0 -1,
se va afişa: Produsul numerelor nenule: 6
Numere egale cu zero: 3.
pentru [Link]: 0 0 0,
se va afişa : nu exista numere nenule
Numere egale cu zero: 3.

Limbajul Python

with open("[Link]", "r") as f:


continut = [Link]()
numere = list(map(int, [Link]().split()))
produs = 1
are_nenule = False

224
numar_zero = 0
for x in numere:
if x == 0: numar_zero += 1
else:
produs *= x
are_nenule = True
if are_nenule: print("Produsul numerelor nenule:", produs)
else: print("nu exista numere nenule")
print("Numere egale cu zero:", numar_zero)

Limbajul C/C++

#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("[Link]");
lon long x,produs = 1, numarZero = 0;
bool areNenule = false;
while (fin >> x) {
if (x == 0) numarZero++;
else { produs *= x; areNenule = true; }
}
if (areNenule) cout << "Produsul numerelor nenule: " << produs;
else cout << "nu exista numere nenule";
cout << "Numere egale cu zero: " << numarZero;
return 0;
}

40. Scrieți un program Python/C++ care citește din fișierul [Link] două numere naturale
d1 și d2 (0 ≤ d1 ≤ 9, 0 ≤ d2 ≤ 9) și care afișează in fisier [Link] al cincilea
număr natural de exact 4 cifre pentru care diferența, în valoare absolută, dintre prima
și a doua cifră este egală cu d1 și diferența în valoare absolută dintre a treia și a patra
cifră este egală cu d2. Dacă nu există un astfel de număr, se afișează: imposibil.
De exemplu, [Link] 2 3 , se va afișa în [Link] : 1529
Limbajul Python
with open("[Link]", "r") as f:
d1, d2 = map(int, [Link]().split())
gasite = 0
for numar in range(1000, 10000):
mii = numar // 1000
sute = (numar // 100) % 10
zeci = (numar // 10) % 10
unit = numar % 10
if abs(mii - sute) == d1 and abs(zeci - unit) == d2:
gasite += 1
if gasite == 5:
print(numar)
break
if gasite < 5: print("imposibil")

225
Limbajul C/C++

#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int main() {
ifstream fin("[Link]");
int d1, d2, gasite;
fin >> d1 >> d2;
gasite = 0;
for (int numar = 1000; numar <= 9999; numar++) {
int mii = numar / 1000;
int sute = (numar / 100) % 10;
int zeci = (numar / 10) % 10;
int unit = numar % 10;
if (abs(mii - sute) == d1 && abs(zeci - unit) == d2) {
gasite++;
if (gasite == 5) {
cout << numar;
return 0;
}
}
}
cout << "imposibil";
return 0;
}

41. Scrieți un program Python/C++ care citește din fișierul [Link], n numere naturale ,
printre care se consideră că există numerele impare în șir. Dacă produsul celor mai
mici două numere impare este egal cu diferența dintre cele mai mari două numere
impare, atunci se va scrie în fișierul de ieșire [Link] mesajul „COD CONFIRMAT”
sau „COD INVALID” dacă condița nu este îndeplinită.
De exemplu, pentru [Link] cu conținutul: 7
5 9 4 11 3 2 17
programul va scrie în [Link] : COD CONFIRMAT
(Cele mai mici două:3,5 → 3×5 = 15
Cele mai mari două: 17, 11 → 17−11 = 6 =>15 ≠ 6)

Limbajul Python

with open("[Link]", "r") as f:


linii = list(map(int, [Link]().split()))
n = linii[0]
numere = linii[1:]
impare = [x for x in numere if x % 2 == 1]
[Link]()
produs_minime = impare[0] * impare[1]
diferenta_maxime = impare[-1] - impare[-2]
if produs_minime == diferenta_maxime: mesaj = "COD CONFIRMAT"
else: mesaj = "COD INVALID"
with open("[Link]", "w") as f: [Link](mesaj)

226
Limbajul C/C++

#include <iostream>
#include <fstream>
#include <algorithm> // pentru sort
using namespace std;

int main() {
ifstream fin("[Link]");
ofstream fout("[Link]");
int n, x, impare[1000], k = 0;
fin >> n;
for (int i = 0; i < n; i++) {
fin >> x;
if (x % 2 == 1) { impare[k] = x; k++; }
}
if (k < 4) {
fout << "COD INVALID";
return 0;
}
sort(impare, impare + k);
int produs = impare[0] * impare[1];
int diferenta = impare[k - 1] - impare[k - 2];
if (produs == diferenta)
fout << "COD CONFIRMAT";
else
fout << "COD INVALID";
return 0;
}

42. Fișierul [Link] conține un șir de cel puțin 10 și cel mult o mie de numere naturale,
separate prin câte un spațiu. Fiecare număr are cel puțin două și cel mult patru cifre.
Primul termen are numărul de ordine 1, al doilea are 2, și așa mai departe.
Scrieți un program în Python/C++ care citește șirul de numere din fișier și, utilizând un
algoritm eficient din punctul de vedere al timpului de executare, determină numărul de
ordine al acelui termen care este precedat de cele mai multe valori având suma
cifrelor divizibilă cu suma cifrelor sale.
Dacă există mai mulți termeni cu această proprietate, se va afișa doar numărul de
ordine al primului dintre ei.
De exemplu, dacă fișierul [Link] conține numerele 123 456 789 234 321 111
222 333 147 258 369 741 852 963 159
pe ecran se afișează 10

227
Limbajul Python
def suma_cifrelor(n):
suma = 0
while n > 0:
suma += n % 10
n //= 10
return suma
with open("[Link]", "r") as f:
continut = [Link]()

numere_str = [Link]().split()
n = len(numere_str)

numere = [int(numere_str[i]) for i in range(n)]


sume = [suma_cifrelor(numere[i]) for i in range(n)]

max_count = -1
poz_max = -1

for i in range(1, n):


count = 0
for j in range(i):
if sume[j] % sume[i] == 0:
count += 1
if count > max_count:
max_count = count
poz_max = i + 1 # numerotare de la 1

print(poz_max)

Limbajul C/C++
#include <iostream>
#include <fstream>
using namespace std;
const int MAX = 1000;
int sumaCifrelor(int n) {
int suma = 0;
while (n > 0) { suma += n % 10; n /= 10;}
return suma;
}
int main() {
ifstream fin("[Link]");
int numere[MAX], sume[MAX], n = 0;
while (fin >> numere[n]) {
sume[n] = sumaCifrelor(numere[n]); n++;
}
int maxCount = -1, pozMax = -1;
for (int i = 1; i < n; i++) {
int count = 0;
for (int j = 0; j < i; j++)
if (sume[j] % sume[i] == 0) count++;
if (count > maxCount)
{ maxCount = count; pozMax = i + 1; }
}
cout << pozMax << endl;
return 0;
}

228
43. Fișierul [Link] conține un șir de cel puțin două și cel mult o mie de numere naturale
din intervalul [0,106].Numerele sunt separate prin câte un spațiu, iar în șir există cel
puțin doi termeni egali pe poziții consecutive.
Scrieți un program în Python/C++ care citește șirul de numere din fișier și, utilizând un
algoritm eficient din punctul de vedere al timpului de executare, determină poziția acelui
număr care este precedat de cele mai multe valori cu aceeași paritate a sumei cifrelor
ca a sa (adică ambele sume fie pare, fie impare). Dacă există mai multe astfel de
numere, se afișează prima poziție, iar dacă nu există niciunul cu astfel de valori
înaintea lui, se va afișa 0. Pentru determinarea numerelor cerute se utilizează un
algoritm eficient din punctul de vedere al memoriei necesare și al timpului de executare.
De exemplu, dacă fișierul [Link] conține numerele
12 45 78 23 66 89 11 14 22 30 27 33 42 57 60
se va afișa pe ecran : 14
deoarece pentru poziția 14 avem valoare 57=>sumă = 12 = par), sunt în față
66=>s=12,11=>s=2,22=>s=4,33=>s=6,42=>s=6) → 5 termeni cu sumă pară.

Limbajul Python

def suma_cifrelor(n):
suma = 0
while n > 0:
suma += n % 10
n //= 10
return suma
with open("[Link]", "r") as f:
sir = list(map(int, [Link]().strip().split()))
n = len(sir)
paritati = [suma_cifrelor(x) % 2 for x in sir]
nr_pare = 0
nr_impare = 0
max_count = -1
poz_max = 0
for i in range(n):
paritate = paritati[i]
if paritate == 0: count = nr_pare
else: count = nr_impare
if count > max_count:
max_count = count
poz_max = i + 1
if paritate == 0: nr_pare += 1
else: nr_impare += 1
if max_count == 0: print(0)
else: print(poz_max)

Limbajul C/C++

#include <iostream>
#include <fstream>
using namespace std;

229
int sumaCifrelor(int n) {
int suma = 0;
while (n > 0) {
suma += n % 10;
n /= 10;
}
return suma;
}
int main() {
ifstream fin("[Link]");
const int MAX = 1000;
int numere[MAX];
int paritati[MAX]; // 0 pentru sumă pară, 1 pentru impară
int n = 0;
int x;
while (fin >> x) {
numere[n] = x;
int suma = sumaCifrelor(x);
paritati[n] = suma % 2; // 0 = par, 1 = impar
n++;
}
int nr_pare = 0, nr_impare = 0;
int max_count = -1;
int poz_max = 0;
for (int i = 0; i < n; i++) {
int count;
if (paritati[i] == 0) count = nr_pare;
else count = nr_impare;
if (count > max_count) {
max_count = count;
poz_max = i + 1; // numerotare de la 1
}
if (paritati[i] == 0) nr_pare++;
else nr_impare++;
}
if (max_count == 0) cout << 0;
else cout << poz_max;
return 0;
}

44. Fișierul [Link] conține pe prina linie un număr natural n, pe a doua linie un șir de n
numere naturale ordonate strict crescător ,numere naturale din intervalul [0,106],iar
pe a treia linie un număr natural k.
Scrieți un program în Python/C++ care citește datele de numere din fișier și, utilizând
un algoritm eficient din punctul de vedere al timpului de executare, determină și
afișează poziția (indexul de la 1) primului număr mai mare decât k din șir.
Dacă nu există un astfel de număr, se afișează mesajul nu exista

230
De exemplu, dacă fișierul [Link] conține numerele:
7
3 8 10 15 21 30 42
20
se va afișa: 5(21 este primul număr > 20, iar poziția lui este 5)
Dacă fișierul [Link] conține numerele:
5
10 20 30 40 50
60
se va afișa: nu exista

Limbajul Python

with open("[Link]", "r") as f:


n = int([Link]())

linia_cu_numere = [Link]().split()
k = int([Link]())
pozitie = 0
gasit = False
for i in range(n):
val = int(linia_cu_numere[i])
if val > k:
pozitie = i + 1 # numerotare de la 1
gasit = True
break
if gasit: print(pozitie)
else: print("nu exista"

Limbajul C/C++

#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("[Link]");
int n, k, x, poz = 0;
fin >> n;
bool gasit = false;
for (int i = 1; i <= n; ++i) {
fin >> x;
if (!gasit && x > k) { poz = i; gasit = true; break; }
}

231
while (fin >> x) {
k = x;
break;
}
if (gasit) cout << poz;
else cout << "nu exista";
return 0;
}

45. Fișierul [Link] conține pe prina linie un număr natural n, pe a doua linie un șir de n
numere naturale ordonate strict crescător ,numere naturale din intervalul [0,106],iar
pe a treia linie un număr natural k.
Scrieți un program în Python/C++ care citește datele de numere din fișier și, utilizând
un algoritm eficient din punctul de vedere al timpului de executare, determină și
afișează numărul de valori din șir care sunt multipli ai lui k. din șir.
Dacă nu există un astfel de număr multiplu al lui k în șir, se afișează mesajul nu
exista

De exemplu, dacă fișierul [Link] conține numerele

7
100 90 80 70 60 50 40
20
se va afișa: 4

Limbajul Python Limbajul C/C++


with open("[Link]", "r") as f: #include <iostream>
#include <fstream>
n = int([Link]())
using namespace std;
linie2 = [Link]().split()
int main() {
k = int([Link]()) ifstream fin("[Link]");
multipli = 0 int n, x, k;
for s in linie2: fin >> n;
int multipli = 0;
x = int(s)
for (int i = 0; i < n; ++i) {
if x % k == 0:
fin >> x;
multipli += 1 if (x % k == 0) multipli++;
if multipli == 0: }
print("nu exista") fin >> k;
if (multipli == 0)
else:
cout << "nu exista";
print(multipli)
else
cout << multipli;
return 0;
}

232
VIII. Răspunsuri

I.1.
1) c. 3) d. 5) c. 7) c. 9) d. 11) a. 13) c. 15) b.
2) a. 4) d. 6) b. 8) a. 10) a. 12) b. 14) a.

I.2.

I.3.
a) 11 b) 32.5 c) True d) 1 e) 16.0 f) 11
int float bool int float int

I.4.
Constante numerice întregi Constante numerice reale: Constante șir de caractere
2026, 0xB12, 0o34 142e-2,723.45,0.182, 2.25e1 “xyz”,’156’, ’x’, ”523.26”

I.5. a)-4); b)-5); c)-3); d)-1); e)-6); f)-2)

I.6. a)”abc12” b)15 c) abcabcabc d)True


str int str bool
I.7.
1)a. 2)b. 3)d. 4)a. 5)c. 6)a. 7)a. 8)d. 9)b. 10)d. 11)d. 12)a.

I.8
1)a. 2)d. 3)d. 4)a. 5)a. 6)d. 7)b. 8)b. 9) d. 10)a.

V.1. m V.2. s=”CulegereInformatica”


ame t=”Culegere de Informatica”
Exa
amen
Examen
V.3. Foarte*Foarte*BINE V.4. c.

233
V.4.

IX. Bibliografie

 [Link]

 [Link]

 Vlad Tudor - Curs de programare in Python 3 - Fundamente pentru incepători,


ebook, pdf, ISBN: 978-606-94898-1-9

234
Editura L&S Soft | Infobits Academy
[Link]

Cărți în format electronic cu specific informatic


[Link]

Curs online gratuit interactiv – limbajul Python 3


[Link]

235

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