0% found this document useful (0 votes)
77 views21 pages

Probleme C++

The document contains C++ code snippets for various sorting algorithms and operations on natural numbers: 1) Code snippets are provided to implement selection sort, bubble sort, insertion sort, and merge sort algorithms to sort arrays of integers. 2) Other code snippets perform operations on natural numbers such as calculating the sum of divisors, checking if a number is perfect, reversing a number, and determining if numbers have the same number of divisors. 3) Additional code determines properties of numbers like checking if they are prime, palindrome, or have digits in increasing/decreasing order. Operations include decomposing a number into prime number sums and finding common digits between two numbers.

Uploaded by

Joshua Adams
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
77 views21 pages

Probleme C++

The document contains C++ code snippets for various sorting algorithms and operations on natural numbers: 1) Code snippets are provided to implement selection sort, bubble sort, insertion sort, and merge sort algorithms to sort arrays of integers. 2) Other code snippets perform operations on natural numbers such as calculating the sum of divisors, checking if a number is perfect, reversing a number, and determining if numbers have the same number of divisors. 3) Additional code determines properties of numbers like checking if they are prime, palindrome, or have digits in increasing/decreasing order. Operations include decomposing a number into prime number sums and finding common digits between two numbers.

Uploaded by

Joshua Adams
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 21

int main()

{
int n, d, x, nr,i,k=0;
fin>>n;
for(i=1;i<=n;i++)
{
fin
>>x;
d=2;
nr=0;
while(x>1 && nr<=2)
{ while(x%d==0 && nr<=2) { nr++;
x=x/d;
}
d++;
}
if(nr==2) k++;
}
fout<<k;
fin.close();
fout.close();
return 0;
}

Un om are de urcat n trepte stiind ca poate pasi pe treapta urmatoare


sau sari peste o treapta.
In cate moduri poate urca omul cele n trepte?
using namespace std;
ifstream fin("p7p60.in");
ofstream
fout("p7p60.out");
int main()
{
int x,y,z,n;
x=1;y=1;
fin>>n;
if(n<=1) fout<<1;
else
{ for(int i=2;i<=n;i++)
{ z=x+y;
x=y;
y=z;
}
fout<<z;
}
fin.close();
fo
ut.close();
return 0;
}

Sa se ordoneze descrescator elementele lui vector cu n elemente


numere intregi fara a afecta
elementele nule din vector si pozitiile acestora.
#include<fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout
("date.out");
int main()
{
int i,j,aux,n,a[100];
fin>>n;
for(i=1;i<=n;i++) fin>>a[i];
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[i]<a[j] && a[i]!=0 && a[j]!=0)
{ aux=a[i];
a[i]=a[j];
a[j]=aux;
}
for(i=1;i<=n;i++) fout<<a[i]<<" ";
fin.close();
fout.close();
return 0;
}

Gnom
sort.
#include<fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int main()
{
int
i,n,a[100];
fin>>n;
for(i=1;i<=n;i++) fin>>a[i];
for(i=1;i<n;i++)
if(a[i]>a[i+1])
{ int aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
if(i>1)i=i
2;
}
for(i=1;i<=n;i++) fout<<a[i]<<" "
;

fin.close();
fout.close();
return 0;
}

Cautarea binara.
#include<fstream>
using namespace std;
ifstream fin("dateo.in");
ofstream fout("dateo.out");
int main()
{
int x,i,n,a[100],s,d,m,gasit=0;
fin>>n;
for(i=1;i<=n
;i++) fin>>a[i];
fin>>x;
s=1; d=n;
while(s<=d && !gasit)
{
m=(s+d)/2;
if(a[m]==x) gasit=1;
else if(a[m]<x) s=m+1;
else d=m
1;
}
if(gasit) fout<<m;
else fout<<"Nu se gaseste";
fin.close();
fout.close();
return 0;
}

Bubble
sort.
#include<fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int main()
{
int i,ok,n,a[100];
fin>>n;
for(i=1;i<=n;i++) fin>>a[i];
do { ok=1;
for(i=1;i<n;i++)
if(a[i]>a[i+1])
{ int aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;

ok=0;
}
}
while(!ok);
for(i=1;i<=n;i++) fout<<a[i]<<" ";
fin.close();
fout.close();
return 0;
}

Sortarea prin selectie directa.


#include<fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int main()
{
int i,j,n,a[100];
fin>>n;
for(i=1;i<=n;i++) fin>>a[i];
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(a[i]>a[j])
{ int aux=a[i];
a[i]=a[j];
a[j]=aux;
}
for(i=1;i<=n;i++) fout<<a[i]<<" ";
fin.close();
fout.close();
return 0;
}

Din fisierul date.in se citeste un vector cu n elemente naturale. Sa se


ordoneze crescator elementele pare si descrescator cele impare fara
a modifica pozitiile pe care se afla elemente pare, respectiv impare.
#include<fstream>
using namespace std;
ifstream fin("date.in")
;
ofstream fout("date.out");
int main()
{
int i,j,aux,n,a[100];
fin>>n;
for(i=1;i<=n;i++) fin>>a[i];
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[i]>a[j] && a[i]%2==0 && a[j]%2==0 || a[i]<a[j] &&
a[i]%2!=0 && a[j]%2!=0)
{ aux=a[i];
a[i]=a[j];

a[j]=aux;
}
for(i=1;i<=n;i++) fout<<a[i]<<" ";
fin.close();
fout.close();
return 0;
}

Se citeste un numar natural n. Sa se determine cate cifre pare si cate


cifre impare contine numarul n.
#include<iostream>
using namespace std;
int main()
{
int n,imp,par;
cout<<"n="; cin>>n;
par=imp=0;
while(n>0)
{
if(n%2==0) par++;
else imp++;
n=n/10;
}
cout<<par<<" pare si "<<imp<<" impare";
return 0;
}

Sa se elimine dintr
un numar natural n toate cifrele pare.
#include<iostream>
using namespace std;
int main()
{
int n,r;
cout<<"n="; cin>>n;
r=0;
while(n>0)
{
if(n%10%2!=0) r=r*10+n%10;
n=n/10;
}
while(r>0)
{
n=n*10+r%10;
r=r/10;
}
cout<<n;
}

Se citeste un numar natural n. Sa se calculeze si sa se afiseze


rasturnatul (oglinditul) lui n.

#include<iostream>
using namespace std;
int main()
{
int n,r;
r=0;
cout<<"n="; cin>>n;
while(n>0)
{
r=r*10+n%10;
n=n/10;
}
cout
<<"rasturnatul este "<<r;
return 0;
}

Se citeste un numar natural n. Sa se verifice daca este palindrom (citit


de la dreapta spre
stanga are aceeasi valoare).
Exemplu: 123321 este palindrom, iar 12322 nu este
#include<iostream.h>
using namespace s
td;
int main()
{
int n,r,c;
r=0;
cout<<"n="; cin>>n;
c=n;//copie
while(n>0)
{ r=r*10+n%10;
n=n/10;
}
if(r==c) cout<<"este palindrom";
else cout<<"nu este palindrom";
return 0;
}

Se citeste un numar natural n cu cel putin 3 cifre. Sa se calc


uleze si sa se afiseze numarul obtinut din n prin eliminarea primei si a
ultimei cifre.
Exemplu:
n=34255 rezulta n=425
#include<iostream>
using namespace std;
int main()
{
int n,r;
cout<<"n="; cin>>n;
n=n/10;

r=0;
while(n>0)
{
r=r*10+n%10;
n=n/10;
}
r=r/10;
while(r>0)
{
n=n*10+r%10;
r=r/10;
}
cout<<n;
return 0;
}

Se citesc 2 numere naturale a si b. Sa se determine cate cifre egale


se afla pe pozitii indentice in cele doua numere.
Exemplu:
a=3421345
b=4531125
cifre egale pe
pozitii identice sunt cifra unitatilor si cea a miilor, deci doua.
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
c=0;
while(a>0 && b>0)
{ if(a%10==b%10) c++;
a=a/10;
b=b/10;
}
cou
t<<c;
return 0;
}

Sa se descompuna un numar natural n in toate modurile ca suma de


doua numere prime. Daca nu exista nici o descompunere, atunci sa
se afiseze mesajul Imposibil.
#include<iostream>
using namespace std;
int main()
{
int n,x,y,p,d,o
k=0;
cout<<"n=";

cin>>n;
for(x=2;x<=n/2;x++)
{
p=1;
for(d=2;d<=x/2;d++)
if(x%d==0) p=0;
y=n
x;
for(d=2;d<=y/2;d++)
if(y%d==0) p=0;
if(p) { cout<<x<<" "<<y<<endl;
ok=1;
}
}
if(!ok) cout<<"imposibil";
return 0;
}

Un num
ar se numeste perfect daca este egal cu suma divizorilor sai mai mici
decat el, de exemplu 6=1+2+3. Sa se afiseze toate numerele perfecte
mai mici sau egale cu un numar n citit de la tastatura.
#include<iostream>
using namespace std;
int main()
{
int
n,s,d,x;
cin>>n;
for(x=1;x<=n;x++)
{
s=0;
for(d=1;d<x;d++)
if(x%d==0) s=s+d;
if(s==x) cout<<x<<" ";
}
return 0;
}

Se citesc doua numere naturale a si b, fiecare avand cifrele distincte.


Determinati cate cifre comune au cele 2 numere.
Exemplu: a=23416 si b=345987 au 2 cifre comune (3 si 4)
#include<iostream>
using namespace std;
}

Sa se afiseze numer
ele mai mici sau egale cu n care au proprietatea sa atat ele cat si
rasturnatul lor sunt numere prime.
Exemplu: 13 este prim si la fel 31.

#include<iostream>
using namespace std;
int main()
{
int n, x, y,p,d,r;
cout<<"n="; cin>>n;
for(x=2;x<=n;x++
)
{
p=1;
for(d=2;d<=x/2;d++)
if(x%d==0) p=0;
if(p==1)
{
r=0;
y=x;
while(y>0)
{ r=r*10+y%10;
y=y/10;
}
for(d=2;d<=r/2;d++)
if(r%d==0) p=0;
if(p==1) cout<<x<<" ";
}
}
return 0;
}

Se citeste un numar natural n. Sa se determine daca el are cifrele


ordonate crescator sau descrescator sau cifrele lui nu sunt ordonate.
#include<iostream>
using namespace std;
int main()
{
int n,c,d;
c=d=1;
cin>>n;
while(n>9)
{
if(n%10>=n/10%10) d=0;
if(n%10<=n/10%10)
c=0;
n=n/10;
}
if(c==1) cout<<"crescator";
else if (d==1) cout<<"descrescator";
else cout<<"nici";
return 0;
}

Sa se calculeze cmmdc al 3 numere a, b si c fara a calcula cmmdc a


doua dintre ele si apoi cu al treilea.

#include<io
stream>
using namespace std;
int main()
{
int a,b,c,min;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
while(a!=b || a!=c || b!=c)
{
min=a;
if(b<min) min=b;
if(c<min) min=c;
if(a!=min) a=a
min;
if(b!=min) b=b
min;
if(c!=m
in) c=c
min;
}
cout<<a;
return 0;
}

Doua numere naturale diferite a si b se numesc prietene daca suma


divizorilor lui a fara a este egala cu b si suma divizorilor lui b fara b
este egala cu a. Scrieti un program care sa afiseze primele 3 perechi
de numere prietene.
#include<iostream>
using namespace std;
int main()
{
int k,x,sd1,sd2,d;
k=0;
x=2;
while(k<3)
{
sd1=0;
for(d=1;d<=x/2;d++)
if(x%d==0) sd1=sd1+d;
sd2=0;
for(d=1;d<=sd1/2;d++)
if(sd1%d==0) sd2=sd2+d;
if(sd2==x && x
<sd1)
{ cout<<x<<" "<<sd1<<endl;

k++;
}
x++;
}
return 0;
}

Cifra de control a unui numar n se numeste cifra obtinuta calculand


repetat suma cifrelor lui
n si inlocuidu-l pe n cu suma calculata. Pentru un numar natural n
afisati cifra lui de control.
Exemplu: pentru n=3429 calculam suma cifrelor 18, iar suma cifrelor
lui 18 este 9, deci 9 este cifra de control a lui 3429.
#include<iostream>
using namespace std;
int main()
{
int n,s;
cout<<"n=";
cin>>n;
while(n>9)
{
s=0;
while(n>0)
{
s=s+n%10;
n=n/10;
}
n=s;
}
cout<<n;
}

Se citeste un numar natoral n. Afisati cifrele distincte ale lui n (in orice
ordine). Exemplu: Cifrele distincte ale lui 234542 sunt 2, 3, 4 si 5.
#include<iostream>
using na
mespace std;
int main()
{
int n,r,c;
cout<<"n="; cin>>n;
while(n>0)
{
c=n%10;
cout<<c;
r=0;
while(n>0)
{
if(n%10!=c) r=r*10+n%10;
n=n/10;

}
n=r;
}
return 0;
}
sau
#include<iostream>
using namespace std;
int main()
{
int n,c,g,
m;
cin>>n;
for(c=0;c<=9;c++)
{
m=n;
g=0;
while(m>0)
{
if(m%10==c) g=1;
m=m/10;
}
if(g) cout<<c<<" ";
}
return 0;
}

Un numar natural n se numeste superprim daca atat el cat si toate


prefixele sale sunt numere prime. Numarul 2399 este superprim
deoarece 2399, 239, 23 si 2 sunt numere prime.
Pentru un numar natural n citit de la tastatura aflati toate numerele
superprime mai mici sau egale cu n.
#include<iostream>
using namespace std;
int main()
{
int n,x,d,i,p;
cin>>n;
for(i
=2;i<=n;i++)
{
p=1;
x=i;
while(x)
{
if(x==1) p=0;
else
if(x%2==0) p=0;
else for(d=3;d<=sqrt(x*1.0);d=d+2)
if(x%d==0) p=0;
x=x/10;

}
if(p) cout<<i<<" ";
}
return 0;
}

Se citesc 2 numere naturale a si


b. Afisati toate perechile de numere x si y din intervalul [a,b]
care au proprietatea ca au acelasi numar de divizori.
#include<iostream>
using namespace std;
int main()
{
int a,b,x,y,ndx,ndy,d;
cin>>a>>b;
for(x=a;x<=b;x++)
for(y=x+1;y<=b;y++)
{
ndx=0;
for(d=1;d<=x;d++)
if(x%d==0) ndx++;
ndy=0;
for(d=1;d<=y;d++)
if(y%d==0) ndy++;
if(ndx==ndy) cout<<x<<" "<<y<<endl;
}
return 0;
}

Cifra de control a unui numar n se numeste cifra obtinuta calculand


repetat suma cifrelor lui n si inlocuidu-l pe n cu suma calculata.
Exemplu: pentru n=3429 calculam suma cifrelor 18, iar suma cifrelor
lui 18 este 9, deci 9 este cifra de control a lui 3429. Dandu-se un
numar natural n si o cifra x, afisati primele n numere naturale care au
cifra de control egala cu x.
Exemplu: pentru n=5 si x=7 se vor afisa numerele 7, 16, 25 , 34 si 43.
#include<iostream>
using namespace std;
int main()
{
int n,x,a;
cout<<"n="; cin>>n;
cout<<"x="; cin>>x;
for(a=x;a<=x+(n
1)*9;a=a+9)
cout<<a<<" ";
return 0;
}

Se citeste un numar natural n. Introduceti semnul * in numar astfel


incat produsul obtinut sa fie maxim.
Exemplu: n=4322, produsul maxim se obtine astfel: 4*322=1288.
(celelalte variante: 43*22=946 sau 432*2=864 dau produsmai mic)
#include<iostream>
using namespace std;
int main()
{
int n,p,pp,pmax=0;
cout<<"n="; cin>>n;
p=10;
while(p<=n)
{
if(n/p*(n%p)>pmax){ pmax=n/p*(n%p);
pp=p;
}
p=p*10;
}
cout<<n/pp<<"*"<<n%pp<<"="<<pmax;
retu
rn 0;
}

Se citeste un numar natural n si apoi n numere naturale. Afisati


numarul total de cifre care compun numerele prime dintre cele n citite.
#include<iostream>
using namespace std;
int main()
{
}

Se citeste un numar natural n. Afisati cel


e 2 numere obtinute prin impartirea "la mijloc" a
numarului n. Exemple: n=12345 se afiseaza 12 si 345
n= 12345678 se afiseaza 1234 5678
#include<iostream>
using namespace std;
int main()
{
int n,x,p,nc,i;
cin>>n;
x=n;
nc=0;
while(x)
{ nc++;
x=x/10;
}
if(nc%2==0) nc=nc/2;
else nc=nc/2+1;
p=1;
for(i=1;i<=nc;i++) p=p*10;

cout<<n/p<<" "<<n%p;
return 0;
}

Se citeste un numar natural n. Afisati cel mai mic numar palindrom


care este mai mare decat n.
Exemple: n=12345 se afiseaza 12421 n=123 se afiseaza 131
#include<iostream>
using namespace std;
int main()
{
int n,x,r,y;
cin>>n;
x=n+1;
do
{
y=x;
r=0;
while(y>0)
{
r=r*10+y%10;
y=y/10;
}
if(x!=r) x++;
}
while(x!=r);
cout<<x;
}

Sa se afiseze cifra care apare


de cele mai multe ori intr-un numar natural n si de cate ori
apare ea in n. Exemplu: n=133121 se afiseaza 1 3
#include<iostream>
using namespace std;
int main()
{
int n,x,c,k,m=0,cmax;
cin>>n;
for(c=0;c<=9;c++)
{
x=n;
k=0;
while(x>0)
{
if(x%10==c) k++;
x=x/10;
}
if(k>m)
{
m=k;
cmax=c;

}
}
cout<<cmax<<" "<<m;
return 0;
}

Se citeste un numar natural n cu numar par de cifre. Calculati si afisati


numarul obtinut din n inversand cifra unitatilor cu a zecilor, cea a su
telor cu cea a miilor, etc. Exemplu: n=123456 rezulta 214365.
#include<iostream>
using namespace std;
int main()
{
int n,r;
cin>>n;
r=0;
while(n>0)
{
r=r*100+n%100;
n=n/100;
}
while(r>0)
{
n=n*10+r%10;
r=r/10;
}
cout<<n;
return 0;
}

Se citeste un numar natural n si apoi n numere naturale cu maxim 4


cifre fiecare. Calculati si afisati numarul obtinut prin lipirea la numarul
maxim a numarului minim dintre cele n numere citite.
Exemplu: n=4 si numerele 56 234 2321 345, numarul rezu
ltat va fi 232156.
#include<iostream>
using namespace std;
int main()
{
int n,i,x,maxx=
10000, minn=10000,r=0;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x;
if(x>maxx) maxx=x;
if(x<minn) minn=x;
}
while(minn>0)
{

r=r*10+minn%10;
minn=minn/10;
}
while(r>0)
{
maxx=maxx*10+r%10;
r=r/10;
}
cout<<maxx;
}

Calculati si afisati media aritmetica a palindroamelor din intervalul


[a,b], a si b citite de la tastatura.
#include<iostream>
using namespace std;
int main()
{
int a,b,x,r,y,s=0,n=0
;
cin>>a>>b;
for(x=a;x<=b;x++)
{
r=0;
y=x;
while(y>0)
{
r=r*10+y%10;
y=y/10;
}
if(r==x)
{
s=s+x;
n++;
}
}
if(n==0) cout<<"nu exista palindroame";
else cout<<(float)s/n;
return 0;
}

Se citeste un numar natural n.Afisati cel mai mic palindrom mai mare
decat n. Exemplu: daca n=1232 se va afisa 1331.
#include<iostream>
using namespace std;
int main()
{
int n,x,r,y;
cin>>n;
x=n+1;
do
{
y=x;

r=0;
while(y>0)
{ r=r*10+y%10;
y=y/10;
}
if(x!=r)
x++;
}
while(x!=r);
cout<<x;
return 0;
}

Se citeste un numar natural k, un numar natural n si apoi n numere


naturale. Afisati cel mai mare dintre cele n numere citite care are
exact k divizori.
#include<iostream>
using namespace std;
int
main()
{
int k,n,i,x,d,nd,maxx=0;
cout<<"k="; cin>>k;
cout<<"n="; cin>>n;
for(i=1;i<=n;i++)
{
cin>>x;
nd=0;
for(d=1;d<=x;d++)
if(x%d==0)
nd++;
if(nd==k)
if(x>maxx) maxx=x;
}
cout<<maxx;
return 0;
}

Afisati toate perechile de numere de la 1 la n care au proprietatea ca


au aceeasi suma a cifrelor
#include<iostream>
using namespace std;
int main()
{
int n,i,j,x,y,si,sj;
cin>>n;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
x=i;
si=0;
while(x>0)

{
si=si+x
%10;
x=x/10;
}
y=j;
sj=0;
while(y>0)
{
sj=sj+y%10;
y=y/10;
}
if(si==sj) cout<<i<<" "<<j<<endl;
}
return 0;
}

Se citesc 2 numere naturale a si b, a mai mic decat b. Afisati suma


numerelor prime din intervalul [a,b].
#include<iostream>
using namespace std;
int main()
{
int a,b,n,p,d,s=0;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
for(n=a;n<=b;n++)
{
p=1;
for(d=2;d<=n/2;d++)
if(n%d==0) p=0;
if(p==1) s=s+n;
}
cout<<s;
return 0;
}

Afisati toate numerele mai mici ca un numar n citit de la tastatura care


au proprietatea ca sunt ncadrate de numere prime (x este incadrat de
numere prime daca x+1 si x-1 sunt prime, de exemplu numarul 6).
#include<iostream>
using namespace std;
int main()
{
int n,x,p1,
p2,d;
cin>>n;
for(x=1;x<=n;x++)
{
p1=1;
if(x
-

1==0 || x
1==1) p1=0;
else for(d=2;d<=(x
1)/2;d++)
if((x
1)%d==0) p1=0;
p2=1;
for(d=2;d<=(x+1)/2;d++)
if((x+1)%d==0) p2=0;
if(p1==1 && p2==1) cout<<x<<" ";
}
return 0;
}

Se citesc 2 numere naturale a si b, a mai mic decat b. Afisati cel mai


mic numar palindrom din intervalul [a,b].
#include<iostream>
using namespace std;
int main()
{
int a,b,x,y,r;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
for(x=a;x<=b;x++)
{
r=0;
y=
x;
while(y>0)
{
r=r*10+y%10;
y=y/10;
}
if(r==x)
{ cout<<x;
x=b+1;
}
}
return 0;
}

Se citeste un numar natural n si apoi n numere naturale. Afisati cate


dintre ele au suma cifrelor egala cu numarul de lor de ordine de la c
itire. Exemplu: n=6 si numerele 122 101 34 555 23 123
Se va afisa 3 deoarece numerele care respecta regula sunt 101 , 23si
123.
#include<iostream>
using namespace std;

int main()
{
int n,i,x,s,k=0;
cout<<"n="; cin>>n;
for(i=1;i<=n;i++)
{
cout<
<"x="; cin>>x;
s=0;
while(x)
{
s=s+x%10;
x=x/10;
}
if(s==i) k++;
}
cout<<k;
return 0;
}

You might also like