1. Se citeşte n, număr natural.

Să se verifice dacă numărul
este palindrom.
#include<iostream.h>
void main()
{ int n,m,inv;
cout<<"n="; cin>>n;
inv=0;
m=n;
while (n!=0)
{inv=inv*10+n%10;
n=n/10;
}
if( inv==m)

cout<<" este palindrom";
else cout<<"nu este palindrom";
}

2. Se citeşte n, număr natural. Să se verifice dacă
numărul este perfect.
#include<iostream.h>
void main()
{ int n,s,i;
cout<<"n="; cin>>n;
s=0;
for (i=1;i<=n/2;i++)
if( n%i==0)
s=s+i;
if(s==n)
cout<<" este perfect";
else cout<<"nu este perfect";
}
3. Se citeşte n, număr natural. Să se verifice dacă

numărul este prim şi, în caz contrar, să se afişeze
divizorii acestuia.
#include<iostream.h>
2

void main()
{ int n,p,i;
cout<<"n="; cin>>n;
p=1;
for (i=2;i<=n/2;i++)
if( n%i==0)
p=0;
if((p==1)||(n==2))
cout<<" este prim";
else
{
cout<<"nu este prim si are divizorii: ";
for(i=1;i<=n;i++)
if (n%i==0)
cout<<i<<" ";
}
}

3

4. Să se afişeze toate numerele prime mai mici decât o

valoare citită de la tastatură.
#include<iostream.h>
void main()
{ int n,p,i,ok;
cout<<"n="; cin>>n;
if (n==2)
cout<<n;
else
{cout<<2<<" ";
for (p=3;p<=n;p++)
{
ok=1;
for (i=2;i<=p/2;i++)
if( p%i==0)
ok=0;
if (ok==1)
4

cout<<p<<" ";
}
}
}
5. Se dă un vector X cu n elemente. Să se afişeze

numărul valorilor prime.
#include<iostream.h>
int n,j,nr,x[20];
int prim(int m)
{ int ok,i;
ok=1;
for (i=2;i<=m/2;i++)
if( m%i==0)
ok=0;
return ok;
}
void main()
{
5

cout<<"n="; cin>>n;
for (j=1;j<=n;j++)
{
cout<<"x["<<j<<"]=";
cin>>x[j];
}
nr=0;
for (j=1;j<=n;j++)
if( prim(x[j])==1)
nr=nr+1;
cout<<nr;
}
6. Se dă un vector X cu n elemente. Să se înlocuiască

fiecare element cu media aritmetica a celorlalte n-1
elemente.
#include<iostream.h>
void main()
{ int n,j;
6

float s,x[20];
cout<<"n="; cin>>n;
s=0;
for (j=1;j<=n;j++)
{
cout<<"x["<<j<<"]=";
cin>>x[j];
s=s+x[j];
}
cout<<endl;
for (j=1;j<=n;j++)
{
x[j]=(s-x[j])/(n-1);cout<<x[j]<<" ";
}
cout<<endl;
}
7. Se da un vector x cu n elemente. Sa se elimine elementele
nule.
7

#include <iostream.h>
#include <conio.h>
int x[20],a[20],n,i,j,k;
void main()
{
cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x["<<i<<"]=";
cin>>x[i];
}
cout<<"Sirul initial este"<<endl;
for(i=1;i<=n;i++) cout<<x[i]<<" ";
k=0;
for(i=1;i<=n;i++)
if(x[i]!=0)

8

{
k++;
a[k]=x[i];
}
cout<<"Sirul fara elemente nule este:"<<endl;
for(i=1;i<=k;i++)
cout<<a[i]<<" ";
getch();
}
8. Se dă un vector X cu n elemente. Să se insereze pe

poziţia k dată, o valoare a, citită de la tastatură.
#include<iostream.h>
void main()
{ int n,j,i,k,a,x[20];
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
{cout<<"x["<<i<<"]=";
cin>>x[i];
9

}
cout<<"a="; cin>>a;
cout<<"k="; cin>>k;
for (j=n;j>=k;j--)
x[j+1]=x[j];
n=n+1;
x[k]=a;
for (i=1;i<=n;i++)
cout<<x[i]<<" ";
cout<<endl;
}
9. Se dă un vector X cu n elemente. Să se genereze un

alt vector Y care conţine elementele pare din vectorul
X.
#include<iostream.h>
void main()
{ int n,j,i,x[20],y[20];
cout<<"n="; cin>>n;
10

for (i=1;i<=n;i++)
{cout<<"x["<<i<<"]=";
cin>>x[i];
}
j=0;
for (i=1;i<=n;i++)
if(x[i]%2==0)
{
j=j+1;
y[j]=x[i];
}
for (i=1;i<=j;i++)
cout<<y[i]<<" ";
cout<<endl;
}
10. Se dă un vector X cu n elemente. Să se ordoneze

descrescător elementele vectorului.
#include<iostream.h>
11

void main()
{ int n,j,i,aux,x[20];
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
{cout<<"x["<<i<<"]=";
cin>>x[i];
}
for (i=1;i<=n-1;i++)
for (j=i;j<=n;j++)
if(x[i]<x[j])
{
aux=x[i];
x[i]=x[j];
x[j]=aux;
}
for (i=1;i<=n;i++)
cout<<x[i]<<" ";

12

cout<<endl;
}
11. Se dă un vector X cu n elemente. Să se ordoneze

crescător elementele vectorului.
#include<iostream.h>
void main()
{ int n,j,i,aux,x[20];
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
{cout<<"x["<<i<<"]=";
cin>>x[i];
}
for (i=1;i<=n-1;i++)
for (j=i;j<=n;j++)
if(x[i]>x[j])
{
aux=x[i];
x[i]=x[j];
13

x[j]=aux;
}
for (i=1;i<=n;i++)
cout<<x[i]<<" ";
cout<<endl;
}
12. Se dă un vector X cu n elemente. Să se şteargă

elementul de pe poziţia.
#include<iostream.h>
void main()
{ int n,j,i,k,x[20];
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
{cout<<"x["<<i<<"]=";
cin>>x[i];
}
cout<<"k="; cin>>k;
for (i=k;i<=n-1;i++)
14

x[i]=x[i+1];
n=n-1;
for (i=1;i<=n;i++)
cout<<x[i]<<" ";
cout<<endl;
}
13. Se dă un vector X cu n elemente. Testaţi dacă o

valoare a, introdusă de la tastatură, se găseşte în
vector. În caz afirmativ, precizaţi poziţiile pe care se
află.
#include<iostream.h>
void main()
{ int n,j,i,a,x[20];
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
{cout<<"x["<<i<<"]=";
cin>>x[i];
}
cout<<"a="; cin>>a;
15

j=0;
for (i=1;i<=n;i++)
if(x[i]==a)
{
j=1;
cout<<i<<" ";
}
if(j==0)
cout<<"nu exista in vector valoarea cautata";
cout<<endl;
}
14. Se dă un vector X cu n elemente. Să se afişeze

maximul valorilor negative.
#include<iostream.h>
void main()
{ int n,i,j,max,x[20];
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
16

{
cout<<"x["<<i<<"]=";
cin>>x[i];
}
i=1;
while((i<=n) && (x[i]>=0))
i=i+1;
if (i>n)
cout<<"nu exista elemente negative in vector";
else
{
j=i;
max=x[j];
for(i=j+1;i<=n;i++)
if((x[i]<0) && (x[i]>max))
max=x[i];
cout<<"maximul valorilor negative max= "<<max;

17

}
cout<<endl;
}
15. Se dă un vector X cu n elemente. Să se afişeze

numerele perfecte din vector.
#include<iostream.h>
int perfect(int nr)
{
int s,i;
s=0;
for(i=1;i<=nr/2;i++)
if (nr%i==0)
s=s+i;
if(s==nr)
return 1;
else
return 0;
}
18

void main()
{ int n,i,j,x[20];
cout<<"n="; cin>>n;
cout<<" exemplu de numere perfecte: 6, 28"<<endl;
for (i=1;i<=n;i++)
{
cout<<"x["<<i<<"]=";
cin>>x[i];
}
j=0;
for(i=1;i<=n;i++)
if(perfect(x[i])==1)
{
cout<<"numar perfect= "<<x[i]<<endl;
j=1;
}
if(j==0)

19

cout<<" nu exista numere perfecte in vector";
cout<<endl;
}
16. Se dă un vector X cu n elemente. Să se calculeze cel

mai mare divizor comun al elementelor vectorului.
#include<iostream.h>
int cmmdc(int a,int b)
{
while(a!=b)
if(a>b)
a=a-b;
else
b=b-a;
return a;
}
void main()
{ int n,i,c,x[20];
cout<<"n="; cin>>n;
20

for (i=1;i<=n;i++)
{
cout<<"x["<<i<<"]=";
cin>>x[i];
}
c=cmmdc(x[1],x[2]);
for(i=3;i<=n;i++)
c=cmmdc(c,x[i]);
cout<<"c.m.m.d.c. al elementelor vectorului = "<<c;
cout<<endl;
}
17. Se dă o matrice A pătratică cu nxn elemente. Să se

afişeze maximul elementelor şi poziţiile pe care apare
în matrice.
#include<iostream.h>
void main()
{ int n,i,j,max,x[20][20];
cout<<"n="; cin>>n;
21

for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
cout<<"x["<<i<<"]["<<j<<"]=";
cin>>x[i][j];
}
cout<<" maximul este pe pozitiile:";
max=x[1][1];
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (x[i][j]>max)
max=x[i][j];
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if(x[i][j]==max)
cout<<"("<<i<<","<<j<<") ";
cout<<endl;

22

}
18. Se dă o matrice A pătratică cu nxn elemente. Să se

afişeze minimul elementelor şi poziţiile pe care apare
în matrice.
#include<iostream.h>
void main()
{ int n,i,j,min,x[20][20];
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
cout<<"x["<<i<<"]["<<j<<"]=";
cin>>x[i][j];
}
cout<<" minimul este pe pozitiile :";
min=x[1][1];
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
23

if (x[i][j]<min)
min=x[i][j];
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if(x[i][j]==min)
cout<<"("<<i<<","<<j<<") ";
cout<<endl;
}
19. Se dă o matrice A pătratică cu nxn elemente. Să se

afişeze media aritmetică a elementelor pozitive.
#include<iostream.h>
void main()
{ int n,i,j,nr,x[20][20];
float ma;
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
24

cout<<"x["<<i<<"]["<<j<<"]=";
cin>>x[i][j];
}
cout<<" media aritmetica a elementelor pozitive este:";
ma=0; nr=0;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (x[i][j]>0)
{
ma=ma+x[i][j];nr=nr+1;
}
ma=ma/nr;
cout<<ma;
cout.precision(2);
cout<<endl;
}
20. Se dă o matrice A pătratică cu nxn elemente. Să se

interschimbe două linii L1 şi L2, date.
25

#include<iostream.h>
void main()
{ int n,i,j,aux,l1,l2,x[20][20];
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
cout<<"x["<<i<<"]["<<j<<"]=";
cin>>x[i][j];
}
cout<<"l1=";cin>>l1;
cout<<"l2=";cin>>l2;
cout<<"matricea inainate de interschimbare:"<<endl;
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
cout<<x[i][j]<<" ";

26

cout<<endl;
}
cout<<"matricea dupa interschimbare:"<<endl;
for (j=1;j<=n;j++)
{
aux=x[l1][j];
x[l1][j]=x[l2][j];
x[l2][j]=aux;
}
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}

27

21. Se dă un fişier text care conţine numere naturale,

câte unul pe linie. Să se formeze un alt fişier text care
să conţină numerele pare din fişierul iniţial.
#include<iostream.h>
#include<fstream.h>
void main()
{ int nr;
ifstream f("numere1.txt");
ofstream g("numere2.txt");
while(!f.eof())
{
f>>nr;
if (nr%2==0)
g<<nr<<endl;
}
f.close(); g.close();
cout<<endl;
}
28

22. Să se scrie un program care determina recursiv cel

mai mare divizor comun dintre două numere naturale
date a şi b.
#include<iostream.h>
int cmmdc(int a,int b)
{
int c;
if (a==b) c=a;
else
if (a>b)
c=cmmdc(a-b,b);
else
c=cmmdc(a,b-a);
return c;
}
void main()
{
int a,b;
29

cout<<"a="; cin >>a;
cout<<"b="; cin>>b;
cout<<"cmmdc="<<cmmdc(a,b);
}
23. Să se scrie un program care caută recursiv o

valoare dată într-un vector.
#include<iostream.h>
int a[100],n,i,x,ok;
void caut(int a[100],int n,int x)
{
if (n>=1)
if (a[n]==x)
ok=1;
else
caut(a,n-1,x);
}
void main()
{
30

cout<<"n="; cin >>n;
for(i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
cout<<"valoarea cautata x="; cin>>x;
ok=0;
caut(a,n,x);
if(ok==1)
cout<<"exista";
else
cout<<"nu exista";
}
24. Să se genereze toate permutările elementelor unui

şir dat cu n elemente.
#include<iostream.h>
int st[20],x[100],n,k,as,ev,i;
31

void init()
{
st[k]=0;
}
int succesor()
{
if (st[k]<n)
{st[k]=st[k]+1;
return 1;
}
else return 0;
}
int valid()
{
if(k>1)
for (i=1;i<=k-1;i++)
if(st[k]==st[i])

32

return 0;
return 1;
}
int solutie()
{
if(k==n)
return 1;
else
return 0;
}
void tipar ()
{
for (i=1;i<=n;i++)
cout<<x[st[i]];
cout<<" ";
}
void permutari()

33

{
k=1;
while (k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if (as)
if(solutie())
tipar();
else
{
k++;

34

init();
}
else k--;
}
}
void main()
{
cout<<"n=";cin>>n;
cout<<endl;
for(i=1;i<=n;i++)
{
cout<<"x["<<i<<"]=";
cin>>x[i];
}
permutari();
cout<<endl;
}

35

25. Să se genereze toate aranjamentele elementelor

unui şir dat cu n elemente.
#include<iostream.h>
int st[20],x[100],n,p,k,as,ev,i;
void init()
{
st[k]=0;
}
int succesor()
{
if (st[k]<n)
{st[k]=st[k]+1;
return 1;
}
else return 0;
}
int valid()
{
36

if(k>1)
for (i=1;i<=k-1;i++)
if(st[k]==st[i])
return 0;
return 1;
}
int solutie()
{
if(k==p)
return 1;
else
return 0;
}
void tipar ()
{
for (i=1;i<=p;i++)
cout<<x[st[i]];

37

cout<<" ";
}
void aranjamente()
{

k=1;
while (k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if (as)
if(solutie())

38

tipar();
else
{
k++;
init();
}
else k--;
}
}
void main()
{
cout<<"n=";cin>>n;
cout<<"p=";cin>>p;
cout<<endl;
for(i=1;i<=n;i++)
{
cout<<"x["<<i<<"]=";

39

cin>>x[i];
}
aranjamente();
cout<<endl;
}

26. Să se genereze toate combinările elementelor unui

şir dat cu n elemente.
#include<iostream.h>
int st[20],x[100],n,p,k,as,ev,i;
void init()
{
if(k>1)
st[k]=st[k-1];
else
st[k]=0;
}
int succesor()
40

{
if (st[k]<n-p+k)
{st[k]=st[k]+1;
return 1;
}
else return 0;
}
int valid()
{
for(i=1;i<=k-1;i++)
if (st[k]==st[i])
return 0;
return 1;
}
int solutie()
{
if(k==p)

41

return 1;
else
return 0;
}
void tipar ()
{
for (i=1;i<=p;i++)
cout<<x[st[i]];
cout<<" ";
}
void combinari()
{
k=1;
while (k>0)
{
as=1;ev=0;
while(as && !ev)

42

{
as=succesor();
if(as)
ev=valid();
}
if (as)
if(solutie())
tipar();
else
{
k++;
init();
}
else k--;
}
}
void main()

43

{
cout<<"n=";cin>>n;
cout<<"p=";cin>>p;
cout<<endl;
for(i=1;i<=n;i++)
{
cout<<"x["<<i<<"]=";
cin>>x[i];
}
combinari();
cout<<endl;
}
27. Să se aranjeze n dame pe o tablă de şah de

dimensiuni nxn astfel încât să nu se atace.
#include<iostream.h>
#include<math.h>
typedef int stiva[100];
int n,k,ev,as;
44

stiva st;
void init ()
{
st[k]=0;
}
int succesor ()
{
if (st[k]<n)
{
st[k]=st[k]+1;
return 1;
}
else
return 0;
}
int valid ()
{

45

for (int i=1; i<=k-1; i++)
if ((st[k]==st[i]) || abs(st[k]-st[i])==abs(k-i))
return 0;
return 1;
}
int solutie ()
{
return k==n;
}
void tipar ()
{
for (int i=1; i<=n; i++)
cout<<st[i]<<" ";
cout<<endl;
}
void dame()
{

46

k=1;
while (k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if (as)
if(solutie())
tipar();
else
{
k++;
init();

47

}
else k--;
}
}
void main()
{
cout<<"n=";cin>>n;
cout<<endl;
dame();
cout<<endl;
}
28. Se dă o listă simplu înlănţuită cu elemente numere

întregi. Să se şteargă elementul de pe prima poziţie.
#include<iostream.h>
struct nod
{int info;
nod* adr_urm;
};
48

nod *p,*u,*aux;
void adaugare(nod* &p,int val)
{
nod *c;
if(!p)
{p=new nod;
p->info=val;
p->adr_urm=0;
u=p;}
else
{c=new nod;
u->adr_urm=c;
c->info=val;
c->adr_urm=0;
u=c;
}
}

49

void listare(nod *p)
{
nod *c;
c=p;
while(c)
{
cout<<c->info<<" ";
c=c->adr_urm;
}
cout<<endl;
}
void main()
{
int n,i,x;
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
{ cout<<"dati o valoare ";cin>>x;

50

adaugare(p,x);
}
cout<<"lista initiala:"<<endl;
listare(p);
aux=p;
p=p->adr_urm;
delete aux;
cout<<"lista dupa stergere:"<<endl;
listare(p);
}
29. Se dă o listă simplu înlănţuită cu elemente numere

întregi. Să se şteargă elementul de pe ultima poziţie.
#include<iostream.h>
struct nod
{int info;
nod* adr_urm;
};
nod *p,*u,*aux,*d;
51

void adaugare(nod* &p,int val)
{
nod *c;
if(!p)
{p=new nod;
p->info=val;
p->adr_urm=0;
u=p;}
else
{c=new nod;
u->adr_urm=c;
c->info=val;
c->adr_urm=0;
u=c;
}
}
void listare(nod *p)

52

{
nod *c;
c=p;
while(c)
{
cout<<c->info<<" ";
c=c->adr_urm;
}
cout<<endl;
}
void main()
{
int n,i,x;
cout<<"n="; cin>>n;
for (i=1;i<=n;i++)
{ cout<<"dati o valoare ";cin>>x;
adaugare(p,x);

53

}
cout<<"lista initiala:"<<endl;
listare(p);
d=p;
while(d->adr_urm->adr_urm!=0)
d=d->adr_urm;
aux=d->adr_urm;
d->adr_urm=0;
delete aux;
cout<<"lista dupa stergere:"<<endl;
listare(p);
}

30. Creaţi un arbore binar cu chei întregi. Parcurgeţi

în preordine arborele creat.
#include<iostream.h>
struct nod
{
54

int nr;
nod* st, *dr;
};
nod * c;
void preordine_vsd(nod *c)
{
if(c)
{
cout<<c->nr;
preordine_vsd(c->st);
preordine_vsd(c->dr);
}
}
void inordine_svd(nod *c)
{
if(c)
{

55

inordine_svd(c->st);
cout<<c->nr;
inordine_svd(c->dr);
}
}
void postordine_sdv(nod *c)
{
if(c)
{
postordine_sdv(c->st);
postordine_sdv(c->dr);
cout<<c->nr;
}
}
nod * arbore()
{
int n;

56

nod *c;
cout<<"n="; cin>>n;
if(n)
{
c=new nod;
c->nr=n;
c->st=arbore();
c->dr=arbore();
return c;
}
else return 0;
}
void main()
{
c=arbore();
cout<<"parcurgerea in preordine:"<<endl;
preordine_vsd(c);

57

}
31. Creaţi un arbore binar cu chei întregi. Parcurgeţi

în inordine arborele creat.
#include<iostream.h>
struct nod
{
int nr;
nod* st, *dr;
};
nod * c;
void preordine_vsd(nod *c)
{
if(c)
{
cout<<c->nr;
preordine_vsd(c->st);
preordine_vsd(c->dr);
}
58

}
void inordine_svd(nod *c)
{
if(c)
{
inordine_svd(c->st);
cout<<c->nr;
inordine_svd(c->dr);
}
}
void postordine_sdv(nod *c)
{
if(c)
{
postordine_sdv(c->st);
postordine_sdv(c->dr);
cout<<c->nr;

59

}
}
nod * arbore()
{
int n;
nod *c;
cout<<"n="; cin>>n;
if(n)
{
c=new nod;
c->nr=n;
c->st=arbore();
c->dr=arbore();
return c;
}
else return 0;
}

60

void main()
{
c=arbore();
cout<<"parcurgerea in inordine:"<<endl;
inordine_svd(c);
}
32. Creaţi un arbore binar cu chei întregi. Parcurgeţi

în postordine arborele creat.
#include<iostream.h>
struct nod
{
int nr;
nod* st, *dr;
};
nod * c;
void preordine_vsd(nod *c)
{
if(c)
61

{
cout<<c->nr;
preordine_vsd(c->st);
preordine_vsd(c->dr);
}
}
void inordine_svd(nod *c)
{
if(c)
{
inordine_svd(c->st);
cout<<c->nr;
inordine_svd(c->dr);
}
}
void postordine_sdv(nod *c)
{

62

if(c)
{
postordine_sdv(c->st);
postordine_sdv(c->dr);
cout<<c->nr;
}
}
nod * arbore()
{
int n;
nod *c;
cout<<"n="; cin>>n;
if(n)
{
c=new nod;
c->nr=n;
c->st=arbore();

63

c->dr=arbore();
return c;
}
else return 0;
}
void main()
{
c=arbore();
cout<<"parcurgerea in postordine:"<<endl;
postordine_sdv(c);
}

64