Documente Academic
Documente Profesional
Documente Cultură
cin >>a>>b;
aux=a; a=b; b= aux ;
cout<<a<< “ “<<b;
cin >>a>>b;
if (a>b) max=a;
else max=b ;
cout<< max ;
1
Algoritmi elementari 2020
Varianta III-eficienta-verific dacă nr x este prim
ok=1;//pp că x este prim;
if(x<2|| x%2==0 &&x>2) ok=0;
2
Algoritmi elementari 2020
DIVIZORII PRIMI AI UNUI NUMĂR
3
Algoritmi elementari 2020
Suma exponențílor divizorilor primi ai unui număr-var II
cin >>nr; s=0;
for( i =2; i<=nr; i++)
{ p=0;
while (nr%i= =0)
{ p++; nr=nr/i;}
if(p!=0)s=s+p;}
cout<<s;
4
Algoritmi elementari 2020
Suma cifrelor impare ale unui număr
s=0;
while (n!=0)
{ if(n%2==1) s=s+n%10;
n=n/10; }
cout<<s;
Formarea unui număr din cifrele pare ale unui număr dat, cifrele fiind în aceeași ordine
ca în numărul dat . Ex: x=34568 , xnou=468
xnou=0; p=1;
while (x!=0)
{ if(x%2==0)
{xnou=xnou+ p*(x%10);
p=p*10;}
x=x/10; }
cout<<xnou;
5
Algoritmi elementari 2020
Formarea unui număr din cifrele impare ale unui număr dat, cifrele fiind în ordine
inversă față de ordinea din numărul dat . Ex: x=34568 , xnou=864
xnou=0;
while (x!=0)
{ if(x%2==1)
xnou=xnou*10+x%10;
x=x/10; }
cout<<xnou;
Ștergerea cifrei c dintr-un număr dat. Ex: x=3245268, c=2, se obține xnou=34568
cin>>x>>c; xnou=0; p=1;
while (x!=0)
{ if(x%10!=c)
{xnou=xnou+ p*(x%10);
p=p*10;}
x=x/10; }
cout<<xnou;
Înlocuirea cifrei c1 cu cifra c2. Ex: x=3245218, c1=2, c2=1 se obține xnou=3145118
cin>>x>>c1>>c2; xnou=0; p=1;
while (x!=0)
{ if(x%10==c1)
xnou=xnou+ p*c2;
else
xnou=xnou+ p*(x%10);
p=p*10;
x=x/10; }
cout<<xnou;
Formarea celui mai mare număr din cifrele unui număr dat, Ex: x=324546182 ,
xnou=865443221
xnou=0;
for(c=9;c>=0;c--)
{ ap=0;//inițializăm numărul de apariții ale cifrei c în numărul x
xx=x;//păstrăm numărul x într-un auxiliar xx
while (xx!=0)
{ if(xx%10==c) ap++;
x=x/10; }
while(ap!=0)
{ xnou=xnou*10+c;
ap--;}
//sau
//for(i=1;i<=ap;i++)
// xnou=xnou*10+c;
}
cout<<xnou;
6
Algoritmi elementari 2020
Numărul cifrelor distincte ale unui număr dat. Ex: x=324546182 , are 7 cifre distincte
k=0;
for(c=0;c<=9;c++)//nu contează dacă parcurgem cifrele crescător sau descrescător
{ ap=0;//inițializăm numărul de apariții ale cifrei c în numărul x
xx=x;//păstrăm numărul x într-un auxiliar xx
while (xx!=0)
{ if(xx%10==c)
ap++;
x=x/10; }
if(ap!=0) k++;
}
Verific dacă numărul x are cifrele în ordine crescătoare
ok=1;//consider că numărul are cifrele în ordine crescătoare
while (n>9) // ca să am în număr cel puțin două cifre
{ if(n%10<n/10%10) //ultima cifră este mai mică decât penultima cifră
ok=0; //am găsit două cifre care nu îndeplinesc condiția
n=n/10; }
if(ok==1)cout<<”DA”;
esle cout<<”NU”;
Verific dacă prima cifră a unui număr este egală cu ultima cifră
cin>>x; u=x%10;//păstrez ultima cifră
while(x>9)
{x=x/10 ;}
//x va rămâne cu prima cifră
if(u==x) cout<<”DA”;
else cout<<”NU”;
cin>>n;
t1=1; t2=1;
for( i = 3;i<=n;i++)
{ t3=t1+t2; cout<<t3<<” ”; t1=t2; t2=t3; }
8
Algoritmi elementari 2020
Conversia unui număr din baza q în baza 10
cin>>nq; n=0; p=1;
while(nq!=0)
{ n=n+ p*(nq%10);
p=p*q;
nq=nq/10;}
cout<<n;
int n, i,s=0;
cout<<” Intr. valoare pt n :”; cin >>n;
for( i = 1;i<=n;i++)
s=s+i;
cout<<”suma primelor”<<n<<”numere naturale este:”;
cout<< s;
s= 1!+2!+3!+......+n!
cin >>n;
for( i = 1;i<=n;i++)
{ p=p*i;
s=s+p ;}
cout<<s;
1 PRELUCRAREA A N NUMERE
Se citesc n numere întregi sau se citește un cin>>n;//citirea numărului de numere
șir de n numere întregi……. for( i =1;i<=n;i++) //citirea celor n numere
Algoritmi de rezolvare trebuie să conțină { cin>>x; //citirea numărului curent din șir
secvențele următoare
9
Algoritmi elementari 2020
//Aici se prelucrează numărul curent. Daca { cin>>x; //citirea numărului curent din șir
nr curent îndeplinește condiția cerut se //Aici se prelucrează numărul curent
folosește in calculul cerut} //Daca nr curent îndeplinește condiția cerut
Sau șirul mai poate fi citit astfel se //folosește in calculul cerut
cin>>n;//citirea numărului de numere n--;}
while(n!=0) // citirea celor n numere
1.2.1 Suma numerelor care sunt puteri 1.2.2 Media aritmetică a numerelor din
ale lui 2, din șirul de n numere șir prime cu un numă r k citit de la
tastatură
s=0; s=0;
cin>>n; cin>>n>>k;
for( i =1; i<=n ; i++) for( i =1; i<=n ; i++)
{ cin>>x; aux=x; { cin>>x; a=x; b=k;
while (aux%2==0) while (a!=b)
{ aux=aux/2; } {if(a>b) a=a-b;
if(aux==1) s=s+x ;} else b=b-a; }
cout<<s ; if(a==1) s=s+x ;}
cout<<s ;
11
Algoritmi elementari 2020
1.6 Determinarea celei mai lungi secvențe de numere consecutiv citite din șirul
de n numere îndeplinesc o condiție
1.6.1 Câ te numere conține cea mai cout<<lmax;
lungă secvență de elemente 1.6.2 Câ te elemente conține cea mai
valori prime consecutive lungă secvență de elemente
cin>>n; crescă toare consecutive
lc=lmax=0; cin>>n>>x; //citim n și primul număr din
for( i =1; i<=n ; i++) cele n
{ cin>>x; lc=1; //când prelucrăm perechi
ok=1; lmax=0;
for( j =2; j<=x/2 ; j++) for( i =1; i<n ; i++)
if (x%j= =0) ok=0; { cin>>y;
if(ok==1) lc++; if(y>x) lc++;
else { if(lc>lmax) lmax=lc; else { if(lc>lmax) lmax=lc;
lc=0;} } lc=1;}
if(lc>lmax) lmax=lc; //în cazul când x=y; }
ultimul element //din șir face parte din cea if(lc>lmax) {lmax=lc;}
mai lungă secvență de //numere ce cout<<lmax;
îndeplinesc condiția cerută
1.7 Cele mai mari două numere din șirul de n numere
cin>>n; max1=max2=0;
for( i =1; i<=n ; i++)
{ cin>>x;
if(x indeplinește condiția)
if(x>max1)
{max2=max1;
max1=x;}
else if(x>max2)
max2=x;}
cout<<max2<<” ”<<max1;//am afișat crescător
2.1 Se citește un șir de n numere întregi. Să se verifice dacă șirul celor n numere
conține numere ordonate crescă tor.
cin>>n;
ok=1;// se presupune că este îndeplinită condiția
12
Algoritmi elementari 2020
cin>>x;//se citește separat primul număr din șir
for(i=1; i<=n-1; i++)
{ cin>>y;
if( x>y) ok=0;//dacă s-a găsit o pereche pentru care valoarea din stânga este mai mare ca
valoare din dreapta
// înseamnă că am făcut o presupunere greșită
x=y;}
if(ok==1) cout<<”DA”;
else cout<<”NU”;
Probleme propuse
1.1. Să se afișeze numerele palindrom
1.2. Să se afișeze câte dintre numerele citite au suma cifrelor un număr par.
1.3. Să se afișeze suma numerelor pătrate perfect din șirul de numere citit.
1.4. Să se afișeze numărul de valori care sunt puteri ale lui 2.
1.5. Să se calculeze maximul numerelor pare.
1.6. Să se calculeze media aritmetică a numerelor care nu conțin cifre pare.
1.7. Să se afișeze toate numerele care au 2 divizori proprii.
1.8. Să se scrie un program care citește n numere naturale apoi afișează câte dintre
numerele citite sunt numere prime. Dacă nu s-au citit numere prime se va da un mesaj.
13
Algoritmi elementari 2020
Exemplu. pentru n=8 și valorile 10 23 8 1 29 8 7 17 se afișează 3 numere prime pentru
n=5 și valorile 10 8 22 15 21 se afișează Nu s-au citit numere prime
1.9. Să se scrie un program care citește n numere întregi cu cel mult 9 cifre fiecare și care
determină valoarea celui mai mare pătrat perfect citit. Dacă nu s-au citit pătrate
perfecte se va da un mesaj. Exemplu. pentru n=8 și numerele 34, 5, 25, 4, 134, 100,
49, 67 se afișează 100.Exemplu. pentru n=8 și numerele 34, 15, 251, 41, 13, 10, 41, 67
se afișează Nu s-au citit pătrate perfecte.
1.10. Pentru n (n≤100) numere întregi citite de la tastatură să se determine: Suma
valorilor pare, Ultima cifră a produsului valorilor impare, Media aritmetica a numerelor
citite
1.11. Pentru n (n≤100) numere întregi x cu cel mult 4 cifre fiecare citite de la
tastatură să se determine:
a. valoarea minimă citită
b. valoarea maximă citită şi de câte ori apare această valoare în şirul valorilor citite
c. cel mai mare număr par
d. valoarea x cu cea mai mare sumă a cifrelor. Dacă sunt mai multe astfel de numere
(cu aceeaşi sumă a cifrelor) se va afişa cel cu valoarea cea mai mică.
1.12. Numărul de numere prime din şirul valorilor citite
1.13. Numărul de numere care reprezintă o putere a lui 3
1.14. Numărul de numere a căror invers reprezintă un număr prim
1.15. Pentru n (n≤100) numere întregi x cu cel mult 4 cifre fiecare citite de la
tastatură să se determine numărul cu cei mai mulţi divizori. În cazul în care există mai
multe astfel de numere se va afişa cel cu valoarea cea mai mică.
1.16. Primul număr impar din șirul de n numere
1.17. Ultimul și penultimul număr perfect
1.18. Antepenultimul număr perfect
1.19. Ultimul număr care are numărul de cifre pare egal cu numărul cifrelor impare
1.20. Să se scrie un program care citește n numere naturale nenule cu cel mult 4 cifre
fiecare și care afișează penultimul număr par citit. Dacă nu s-au citit măcar două
numere pare se va da un mesaj corespunzător. Exemplu. pentru n=6 și numerele 34,
45, 422, 64, 134, 1001 se afișează 64. Exemplu. pentru n=6 și numerele 341, 403, 251,
41, 313, 1085 se afișează S-au citit mai putin de doua numere pare
14
Algoritmi elementari 2020
15
Algoritmi elementari 2020
Probleme propuse
3.3 Să se afișeze toate numerele x din intervalul [a, b] cu a≤b care au cifra unităților egală
cu cifra zecilor. Exemplu. pentru a=126 și b=220 se obține: 133 144 155 166 177 188
199 200 211
3.4 Să se scrie un program care afișează numerele din intervalul [a, b] care au suma cifrelor
pare egală cu suma cifrelor impare. Dacă intervalul [a, b] nu conține astfel de numere se
va da un mesaj. Exemplu. pentru a=6900 și b=6950 se afișează 6914 6936 6941. pentru
a=6900 si b=6910 se afișează Nu există
3.5 Să se afişeze numerele prime din intervalul [a,b] unde a şi b sunt numere naturale cu cel
mult 4 cifre citite de la tastatură.
3.6 Să se afişeze pătratele perfecte din intervalul [a,b] unde a şi b sunt numere naturale cu
cel mult 9 cifre citite de la tastatură. Dacă nu sunt pătrate perfecte în intervalul [a,b] se
va afişa un mesaj.
3.7 Să se afişeze numerele palindrome din intervalul [a,b] unde a şi b sunt numere naturale
cu cel mult 9 cifre citite de la tastatură. Dacă intervalul [a,b] nu conţine numere
palindrome se va afişa un mesaj. Exemplu. a=100, b=150 se afişează 101, 121, 131, 141
3.8 Să se afişeze numerele din intervalul [a,b] care sunt o putere a lui 2. Numerele a şi b
sunt numere naturale cu cel mult 9 cifre citite de la tastatură. Dacă intervalul [a,b] nu
conţine numere care să reprezinte puteri ale lui 2 se va afişa un mesaj. Exemplu. a=6,
b=50 se afişează 8, 16, 32.
3.9 Să se afişeze numerele din intervalul [a,b] care memorează cel puţin o cifră pară.
Numerele a şi b sunt numere naturale cu cel mult 9 cifre citite de la tastatură.
3.10 Să se afişeze numerele din intervalul [a,b] care conţin un număr de cifre pare egal cu
numărul de cifre impare. Numerele a şi b sunt numere naturale cu cel mult 9 cifre citite
de la tastatură.
3.11 Să se afişeze numerele din intervalul [a,b] care au cifrele ordonate crescător.
3.12 Să se afişeze numerele din intervalul [a,b] care au cel puţin două zerouri. Dacă nu există
astfel de numere se va da un mesaj.
3.13 Să se afişeze numerele din intervalul [a,b] care conţin acelaşi număr de cifre de 0 şi 1 la
transcrierea în baza 2. Numerele a şi b sunt numere naturale cu cel mult 9 cifre citite de
la tastatură.
3.14 Să se afişeze numerele din intervalul [a,b] care sunt numere prime şi memorează cel
puţin o cifră egală cu cifra x. Dacă nu există astfel de numere se va da un mesaj.
3.15 Să se afişeze numerele din intervalul [a,b] care au suma cifrelor un număr prim. Dacă
nu există astfel de numere se va da un mesaj.
cin>>n;
for( i =1; i<=n ; i++)
{ x=i;
ok=1;
for( j =2; j<=x/2 ; j++)
if (x%j= =0)
ok=0;
if(ok==1)
cout<<i<<” ”;}
17
Algoritmi elementari 2020
if(k==ninv && ki==0)
{cout<<k<<” ”;
n--;}
k++;}
Cazuri particulare
cin >>n;
for( i = 1;i<=2*n;i++)
if (i % 2!=0) cout<< i<<” “;
5.4 Afișarea primelor n numere impare-II
cin >>n;
for( i = 1;i<=2*n;i=i+2)
cout<< i<<” “;
18
Algoritmi elementari 2020
while(ok==0)
{ d=0;
for(j =2;j<=k/2;j++)
if (k%j= =0) d++;
if(d==3)
{cout<<k<<” ”;
ok=1;}
k--;}
7 Generarea celui mai mic/mare număr care îndeplinește o condiție, mai mare/mic decât un
număr dat n
7.1 Să se afișeze cel mai mic numă r palindrom mai mare sau egal cu x citit.
Exemplul 1. pentru x=3527 se afișează : 3553 Exemplul 2. Pentru x=4893 se
afișează : 4994
int x,a,ok,y;
cout<<"x=";
cin>>x;
ok=0;
while(ok==0)
{ a=x;
y=0;
while(a>0)
{y=y*10+a%10;
a=a/10;
}
if(y==x)
ok=1;
else
x++;
}
cout<<endl<<x;
7.2 Să se afişeze cel mai mic numă r x mai mare sau egal decâ t numă rul n citit
care are toate cifrele egale. Exemplu. pentru n=347 se obţine 444 pentru
n=312 se obţine 333
cin>>x;
ok=0;
while(ok==0)
{ a=x;
prelucrează_a
if(condiție_îndeplinită)
ok=1;
else
x++;
}
cout<<endl<<x;
19
Algoritmi elementari 2020
7.3 Să se afişeze cel mai mare numă r prim x strict mai mic decâ t numă rul n citit.
Exemplu. pentru n=22 se obţine 19
int x,a,ok,prim,d;
cout<<"x=";
cin>>x;
ok=0;
x=x-1;
while(ok==0)
{
prim=1;
for(d=2; d<=x/2; d++)
if(x%d==0)
prim=0;
if(prim==1)
ok=1;
else
x--;
}
cout<<endl<<x;
8.1 Se citesc numere întregi pâ nă la întâ lnirea lui 0. Să se afișeze cel mai mare
numă r citit și de numă rul lui de apariții.
cin>>x; max=-32000;
while(x!=0)
{ if(x>max)
{max=x;
k=1;}
else if(x==max) k++;
cin>>x;}
#include <iostream>
20
Algoritmi elementari 2020
using namespace std;
int x,y,i,n,ok;
int main()
{cin>>n;x=2;
cout<<x<<" "<<x+1<<endl;//prima pereche 2 3
n--;//am generat deja o pereche
x=3;
while (n!=0)
{y=x+2;//numai numerele impare sunt prime
//verific daca y este prim
ok=1;
for(i=2;i<=y/2;i++)
if(y%i==0) ok=0;
if(ok==1)
{cout<<x<<" "<<y<<endl;x=y;n--; }
else x=x+2;
}
return 0;
}
9.2 Să se afişeze primele n (n≤100) perechi de numere naturale consecutive a
că ror sumă reprezintă un numă r prim. Exemplu. pentru n=5 se generează 2
3, 3 4, 5 6, 6 7, 8 9
#include <iostream>
using namespace std;
int x,y,i,n,ok;
int main()
{cin>>n;x=2;
while (n!=0)
{y=x+1;//x, y numere consecutive
//verific daca x+y este prim
ok=1;
for(i=2;i<=(x+y)/2;i++)
if((x+y)%i==0) ok=0;
if(ok==1)
{cout<<x<<" "<<y<<endl;
n--; }
x=x+1;
}
return 0;
}
int S,i,n,k;
cout << "\ n="; cin >> n;
for (i=1; i<=n/2; i++)
{
S=0; k=0;
// pentru i-ul curent, calculeaza sumele de forma i+(i+1)+(i+2)+..+(i+k), incercand sa
// gaseasca descompunerea care pleaca de la i
cout << "\n";
while (S+i+k<=n && k<=n/2+1)
{ S=S+(i+k);
cout << (i+k) << '+';
k++;
}
if (S==n) cout << " este"; else cout << " nu este"; }
#include <iostream>
using namespace std;
int a,b,i,j,ok,z;
int main()
{ cin>>a>>b;
for(i=a;i<b;i++)
for(j=i+1;j<=b;j++)
{ ok=1;
for(z=2;z<=i/2;z++)
if(i%z==0)ok=0;
if(ok==1)
{for(z=2;z<=j/2;z++)
22
Algoritmi elementari 2020
if(j%z==0) ok=0;
if(ok==0)cout<<i<<" "<<j<<endl;}
}
return 0;
}
23