Culegere Python 2025
Culegere Python 2025
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
Infobits Academy
Editura L&S SOFT
Telefon: 0727.731.947
E-mail: hello@[Link]
[Link]
[Link]
2
Cuprins
3
I. Operatori, expresii și tipuri de date
4
10) Știind că variabila x=True și variabila y=False, indicați care dintre expresiile Python
următoare are valoarea False.
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)
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
î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.
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”
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
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
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
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
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
a) 1 b) 3 c) 0 d) 2
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]
a. 3 1 3.3333333333333335 c. 3 1 3.3333333
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)
11
II. Structura liniară
#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;}
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.
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.
13
Limbajul Python Limbajul C/C++
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++
#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;
}
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,
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.
#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)
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++
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
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
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.
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;
}
21
Exemplu: Dacă n = 45618, atunci noul număr va fi 448
22
Limbajul Python Limbajul C/C++
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
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
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
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;
}
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;
}
26
III. Structura alternativă
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)
}
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++
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;
}
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.
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
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;
}
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
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
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.
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ă
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
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;
}
48
Limbajul Python Limbajul C/C++
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
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
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
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;
}
52
Limbajul Python Limbajul C/C++
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.
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; }
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
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
56
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++
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;
}
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
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
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)
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
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;
}
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.
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.
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
69
Limbajul Python Limbajul C/C++
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).
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) }
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;
}
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.
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++
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++
75
Limbajul Python Limbajul C/C++
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;
}
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.
78
IV.2. Instrucțiunea repetitivă For
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}.
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;
}
#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;
}
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.
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
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
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
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;
}
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
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
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
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
#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;
}
print(E) cin>>n;
for(i=3;i<=n;i++) E=E+i*(2*i+1);
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;
}
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;
}
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;
}
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;
}
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;
}
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.
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ă
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
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
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;
}
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
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).
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
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;
}
107
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
109
V. Șiruri de caractere
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)
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
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.
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
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++
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
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'}
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
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
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
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);
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
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
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.
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
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)
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
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
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
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;
}
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;
}
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
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]<<" ";
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];
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;
}
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;
}
Limbajul Python
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
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;
}
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
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
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.
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
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;
}
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;
}
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; }
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
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
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
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))
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;
}
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]()
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;
}
Limbajul Python
n = int(input())
v = list(map(int, input().split()))
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
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
#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.
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
#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
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 }
}
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
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
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";
}
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;
}
}
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++
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
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
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)
max_count = -1
poz_max = -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
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
7
100 90 80 70 60 50 40
20
se va afișa: 4
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.8
1)a. 2)d. 3)d. 4)a. 5)a. 6)d. 7)b. 8)b. 9) d. 10)a.
233
V.4.
IX. Bibliografie
[Link]
[Link]
234
Editura L&S Soft | Infobits Academy
[Link]
235