Sunteți pe pagina 1din 23

Algoritmi elementari 2020

Interschimbarea a două valori

cin >>a>>b;
aux=a; a=b; b= aux ;
cout<<a<< “ “<<b;

Maximul dintre două numere

cin >>a>>b;
if (a>b) max=a;
else max=b ;
cout<< max ;

Afișare a trei numere intregi în ordine crescătoare


cin >>a>>b>>c;
if (a>b) { aux=a; a=b; b=aux ;}
if (b>c) {aux=b; b=c; c=aux ;}
if (a>b) {aux=a; a=b; b=aux ; }
cout<<a<< “ “<<b<<” “<<c;

Verific dacă un număr este pătrat perfect


if(sqrt(x)==int(sqrt(x)))
cout<<”DA”;
else
cout<<”NU”;

Verific dacă numărul are ultimele două cifre egale


if(x%10==x/10%10)

NUMĂR PRIM / DIVIZORI PROPRII

Verificarea proprietăţii de număr prim


cin >>nr;
ok=1;
for( i = 2; i<=nr/2 ; i++)
if (nr%i==0) ok=0;
if (ok==1) cout<<“ nr prim”;
else cout<< “ nr nu este prim”;

Varianta II-verific dacă nr x este prim

d=2; ok=1;//pp că x este prim;


while(d*d<=x && ok==1)
{ if (x%d==0) ok=0;
d++;}
if(ok==1) cout<<“ nr prim”;
else cout<< “ nr nu este prim”;

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;

for(d=3;d*d<=x && ok==1; d=d+2)


if (x%d= =0) ok=0;
if(ok==1) cout<<“ nr prim”;
else cout<< “ nr nu este prim”;

Suma divizorilor proprii


cin >>nr; s=0;
for( i =2; i<=nr/2 ; i++)
if (nr%i= =0) s=s+i;
cout<<s;

Verific dacă un număr x este perfect


cin >>nr; s=0;
for( i =2; i<=nr/2 ; i++)
if (nr%i= =0)
s=s+i;
if(s+1==nr)
cout<<”DA”;
else
cout<<”NU”;

Cel mai mic divizor propriu


d=0;
for( i = 2; i<=nr/2 ; i++)
if (nr%i= =0)
{d=i; break;}//opresc la primul divizor
cout<<d;

Numărul divizorilor proprii


cin >>nr;
d=0;
for( i = 2; i<=nr/2 ; i++)
if (nr%i= =0)
d++;
cout<<d;

Cel mai mare divizor propriu


d=0;
for( i = 2; i<=nr/2 ; i++)
if (nr%i= =0)
d=i; //păstrez fiecare divizor, până rămân cu ultimul
cout<<d;

2
Algoritmi elementari 2020
DIVIZORII PRIMI AI UNUI NUMĂR

Afișarea divizorilor primi ai unui număr


cin >>nr;
f= 2;
do{ g=0;
while (nr%f= =0)
{ nr=nr/f ; g= 1;}
if (g= =1) cout<< f<< endl;
f++;
}while(nr! =1);

Afișarea divizorilor primi ai unui număr-II


cin >>nr; s=0;
for( i =2; i<=nr ; i++)
{ p=0;
while (nr%i= =0)
{ p++; nr=nr/i;}
if(p!=0) cout<< i<< endl;

Suma divizorilor primi ai unui număr


cin >>nr;
f= 2; s=0;
while(nr! =1)
{ p=0;
while (nr%f= =0)
{ nr=nr/f ; p++;}
if (p! =0) s=s+f;
f++; }
cout<<s;

Suma 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+i;}
cout<<s;

Suma exponențílor divizorilor primi ai unui număr


cin >>nr;
f= 2; s=0;
while(nr! =1)
{ p=0;
while (nr%f= =0)
{ nr=nr/f ; p++;}
s=s+p;
f++; }

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;

Cel mai mic divizor prim al unui număr dat


cin >>nr; f= 2;
while(nr! =1)
{ while(nr%f= =0)
{ min=f; break;}
f++; }
cout<<min;

Cel mai mare divizor prim al unui număr dat


cin >>nr; f= 2;
while(nr! =1)
{ if (nr%f= =0) max=f;
while(nr%f= =0)
nr=nr/f;
f++; }
cout<<max;

PRELUCRAREA CIFRELOR UNUI NUMĂR/ INVERSUL NUMĂRULUI

Calculul inversului unui număr


ninv=0 ;
cout<<” Intr. un numar pt n :”; cin >>n;
while (n!=0)
{ ninv=ninv*10+n%10;
n=n/10; }
cout<<” inversul numărului este:”<<ninv;

Verific dacă numărul n este palindrom


ninv=0 ; x=n ;
while (x!=0)
{ ninv=ninv*10+x%10;
x=x/10; }
if( ninv==n) cout<<”DA”;
else cout<<”NU”;

Suma cifrelor unui număr


s=0;
while (n!=0)
{ s=s+n%10;
n=n/10; }
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;

Numărul cifrelor unui număr


k=0;
while (n!=0)
{ k ++;
n=n/10; }
cout<<k;

Numărul cifrelor pare unui număr


k=0;
while (n!=0)
{ if(n%2==0) k ++;
n=n/10; }
cout<<k;
Cea mai mare cifră a unui număr
max=0;
while (n!=0)
{ if(n%10>max) max=n%10;
n=n/10; }
cout<<max;

Numărul de apariții ale cifei c într-un număr


cin>>x>>c; k=0;
while (x!=0)
{ if(x%10==c)
k++;
x=x/10; }
cout<<k;

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”;

Prima cifră a unui număr


cin>>x;
while(x>9)
{x=x/10 ;}
cout<<x ; rămâne cu prima cifră

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”;

CMMDC A DOUĂ NUMERE

C.m.m.d.c a două numere-Euclid


cin >>a>>b;
do{ r =a%b; a = b; b = r;}while ( r!=0);
cout<< “c.m.m.d.c este:”<< a;

C.m.m.d.c a două numere-Nicomahus


cin >>a>>b;
while(a!=b)
{if(a>b) a=a-b;
else b=b-a;}
cout<<a;
7
Algoritmi elementari 2020

Verific dacă două numere sunt prime între ele


while(a!=b)
{if(a>b) a=a-b;
else b=b-a;}
if(a==1) cout<<”DA”;
else cout<<”NU”;

CMMMC a două numere


a=x ; b=y ;
while(a!=b)
{if(a<b) a=a+x;
else b=b+y;}
cout<<a;

ȘIRUL FIBONACCI 1,1,2,3,5,8,13, 21, 34, 55, 89,……

Afișarea primilor n termeni ai șirului Fibonacci mai mici decât valoarea n.

cin>>n;
t1=1; t2=1;
for( i = 3;i<=n;i++)
{ t3=t1+t2; cout<<t3<<” ”; t1=t2; t2=t3; }

CONVERSII DE NUMERE DIN BAZA 10 ÎN BAZA 2 ȘI INVERS

Conversia unui număr din baza 10 în baza 2

cin>>n; n2=0; p=1;


while(n!=0)
{ n2=n2+p*(n%2);
p=p*10;
n=n/2;}
cout<<n2;
Conversia unui număr din baza 10 în baza q
cin>>n; nq=0; p=1;
while(n!=0)
{ nq=nq+p*(n%q);
p=p*10;
n=n/q;}
cout<<nq;

Conversia unui număr din baza 2 în baza 10


cin>>n2; n=0; p=1;
while(n2!=0)
{ n=n+ p*(n2%10);
p=p*2;
n2=n2/10;}
cout<<n;

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;

Calculul numărului de cifre de 0 și 1 în transcrierea lui x în baza 2 Ex:15(10)=1111(2)


12(10)=1100(2)
c0=0; c1=0;//c0-numarul de cife de 0; c1-numarul de cifre de 1
cin>>x;
while(x!=0)
{if(x%2==0) c0++; else c1++;
x=x/2;}
cout<<c1<<” ”<<c0;

Verific dacă x este putere a lui 2


cin>>x;
while(x%2==0)
x=x/2;
if (x==1) cout <<”da”;
else cout <<”nu”;

CALCULUL UNOR SUME


s = 1+2+3+.....+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.1 Afișarea numerelor care îndeplinesc o condiție


1.1.1 Afișarea numerelor prime din 1.1.2 Afișarea numerelor care au
șirul de n numere numai cifre pare
cin>>n;
cin>>n; for( i =1; i<=n ; i++)
for( i =1; i<=n ; i++) { cin>>x;
{ cin>>x; aux=x;
ok=1; ki=0;//nr cifrelor impare
for( j =2; j<=x/2 ; j++) while (aux!=0)
if (x%j= =0) {if(aux%2 !=0)
ok=0; ki++;
if(ok==1) aux=aux/10; }
cout<<x<<” ”;} if(ki==0)
cout<<x<<” ”;}
1.2 Suma numerelor care îndeplinesc o condiție

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 ;

1.3 Numă rul de numere care îndeplinesc o condiție


1.3.1 Numă rul de numere, șirul de n aux=aux/10; }
numere, care au suma cifrelor un if(s%2==0)
numă r par k++ ;}
cout<<k;
k=0;
cin>>n; 1.3.2 Numă rul de numere care au nr de
for( i =1;i<=n;i++) cifre pare egal cu nr de cifre impare
{ cin>>x; aux=x; s=0; cin>>n; k=0;
while (aux!=0) for( i =1; i<=n ; i++)
{s=s+aux%10; { cin>>x; aux=x; ki=0; kp=0;
10
Algoritmi elementari 2020
while (aux!=0) if(ki==kp)
{if(aux%2 !=0) ki++; k++ ;}
else kp++; cout<<k<<” ”;
aux=aux/10; }

1.4 Primul/Penultimul/Ultimul numă r care îndeplinește o condiție


1.4.1 Primul numă r par din șirul de n 1.4.2 Ultimul și penultimul numă r
numere perfect
cin>>n; k=0; cin>>n; u=p=0;
for( i =1; i<=n ; i++) for( i =1; i<=n ; i++)
{ cin>>x; { cin>>x; s=0;
if(x%2==0) for( j =2; j<=x/2 ; j++)
{ k++; if (x%j= =0) s=s+j;
if (k==1) p=x; //k=1 am găsit primul if(s+1==x){p=u;
număr u=x;}
else u=x; }} // dacă vrem și ultimul }
cout<<p; cout<<p<<” ”<<u;

1.5 Verificarea unei proprietă ți, de că tre toate cele n numere


1.5.1 Toate numerele, din șirul de n 1.5.2 S-au citit și numere pare printre
numere, sunt pare? cele n numere?
cin>>n; cin>>n;
ok=1;//consider că toate numerele ok=0;//consider că nu s-au citit și numere
îndeplinesc condiția pare
for( i =1; i<=n; i++) for( i =1; i<=n; i++)
{ cin>>x; { cin>>x;
if(x%2!=0) ok=0; if(x%2==0) ok=1;
} }
if(ok==1) cout<<”da”; if(ok==1) cout<<”da”;
else cout<<”nu”; else cout<<”nu”;

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 Prelucrarea perechilor de elemente consecutive din șirul de n


numere citite de la tatatură
cin>>n;
cin>>x;//se citește separat primul număr din șir
for(i=1; i<=n-1; i++)
{ cin>>y;
se prelucrează perechea x,y
x=y;}

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”;

2.2 Toate numerele, din șirul de n numere, au parită ți diferite?


cin>>n>>x; //citesc n și primul număr dintre cele n numere
ok=1;//consider că toate numerele îndeplinesc condiția
for( i =1; i<n ; i++)
{ cin>>y;
if(x%2==y%2) ok=0;//am găsit o pereche de aceeași paritate
x=y;}
if(ok==1)
cout<<”da”;
else
cout<<”nu”;
2.3 Să se afișeze numrul perechilor de elemente consecutive de aceeași paritate
din șirul de n numere
cin>>n>>x; //citesc n și primul număr dintre cele n numere
k=0;//inițializez nr de perechi
for( i =1; i<n ; i++)
{ cin>>y;
if(x%2==y%2) k++;//am găsit o pereche de aceeași paritate
x=y;}
if(k)
cout<<k;
else
cout<<”nu sunt astfel de perechi”;

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

3 Prelucrarea numerelor din intervalul [a,b] care îndeplinesc o


condiție
Parcurgerea intervalului [a,b]
cin>>a>>b;
if(a>b) { aux=a; a=b; b=aux;}
for( i =a; i<=b ; i++)
{ x=i; // păstrez i în x
prelucrare x}
3.1 Afișarea numerelor din 3.2 Afișarea numerelor din
intervalul [a,b] care au cea mai intervalul [a,b] care nu conțin
mare cifră un numă r impar cifra 2
cin>>a>>b; if(a>b) { aux=a; a=b; b=aux;}
cin>>a>>b; if(a>b) { aux=a; a=b; b=aux;} for( i =a; i<=b ; i++)
for( i =a; i<=b ; i++) { aux=i;
{ x=i; m=0; k2=0;//nr cifrelor egale cu 2
while (x!=0) while (aux!=0)
{ if(x%10>m) {if(aux%10==2)
m=x/10; k2++;
x=x/10; } aux=aux/10; }
if(m%2==1) if(k2==0)
cout<<i<<” ”;} cout<<i<<” ”;}

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.

4 Generarea/prelucrarea numerelor care îndeplinesc o condiție,


mai mici sau egale cu un numă r n
cin>>n;
for( i =1; i<=n ; i++)
16
Algoritmi elementari 2020
{ aux=i; // păstrez i în aux
prelucrare aux}

4.1 Afișarea numerelor prime mai mici sau egale cu n citit

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<<” ”;}

5 Generarea primelor n numere care indeplinesc o condiție


cin>>n;
k=2;//primul număr care îndeplinește condiția cerută, pot începe de la orice valoare
convenabilă
while(n!=0)
{ if(k indeplinește condiția)
{cout<<k<<” ”;
n--;}
k++; }
5.1 Afișarea primelor n numere care au exact 2 divizori proprii
cin>>n;
k=2;
while(n!=0)
{ d=0;
for( j =2;j<=k/2;j++)
if (k%j= =0)
d++;
if(d==2)
{cout<<k<<” ”;
n--;}
k++;}
5.2 Afișarea primelor n numere care sunt palindrom și conțin doar cifre pare
cin>>n;
k=2;
while(n!=0)
{ aux=k; ninv=0;ki=0;
while (aux!=0)
{ninv=ninv*10+aux%10;
if(aux%2==1) ki++;
aux=aux/10; }

17
Algoritmi elementari 2020
if(k==ninv && ki==0)
{cout<<k<<” ”;
n--;}
k++;}
Cazuri particulare

5.3 Afișarea primelor n numere impare

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<<” “;

6 Generarea celui mai mic/mare numă r care îndeplinește o


condiție, mai mare/mic decâ t un numă r dat n
cin>>n;
k=n+1;// k=n-1;
ok=0;//încă nu am găsit numărul
while(ok==0)
{……
dacă nr curent k indepl cond
{cout<<k<<” ”;
ok=1; }//oprește generarea
k++; } // k--;
6.1 Generarea celui mai mic numă r prim mai mare decâ t un numă r dat n
cin>>n;
k=n+1;
ok=0;//încă nu am găsit numărul prim
while(ok==0)
{ d=0;
for(j =2;j<=k/2;j++)
if (k%j= =0)
d++;
if(d==0)
{cout<<k<<” ”;
ok=1;}
k++;}
6.2 Generarea celui mai mare numă r cu trei divizori proprii mai mic decâ t un
numă r dat n
cin>>n;
k=n-1;
ok=0;// încă nu am găsit numărul ce îndeplinește condiția

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 Citirea unui șir de numere pâ nă la întâ lnirea numă rului 0


cin>>x;
while(x!=0)
{ prelucrez x
cin>>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;}

9 Generarea primelor n perechi de numere (a,b) care îndeplinesc


o condiţie dată
9.1 Să se afişeze primele n (n≤100) perechi de numere prime consecutive, unde
n se citeşte de la tastatură .Exemplu. pentru n=5 se afişează : 2 3, 3 5, 5 7, 7
11, 11 13

#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;
}

10 Descompunerea unui numă r în sumă /produs de doi sau trei


termeni care îndeplinesc o condiţie
1. Scrieti in toate modurile posibile ca suma de numere naturale consecutive, un numar
natural citit de la tastatura.Exemplu : Pentru n=9 se va afisa : 5 + 4; 2 + 3 + 4.
long i,j,k,n;
21
Algoritmi elementari 2020
cin >> n;
for (i=1; i<=n/2; i++)
for (j=i+1; j<=n; j++)
if((j+i)*(j-i+1)/2==n){
for (k=i; k<j; k++)
cout << k << "+";
cout<<j<<"="<<n<<endl;}
2. Fie n număr natural cu cel mult 4 cifre citit de la tastatură.
a. să se descompună n în sumă de două numere exemplu. n=7, 1+6, 2+5, 3+4,
b.să se descompună n în sumă de trei numere exemplu. n=10, 1+1+8, 1+2+7, 1+3+6, 1+4+5
etc
3. Fiind dat un număr natural n, să se găsească toate posibillitățile de a descompune pe n
în sumă de numere naturale consecutive. Exemplu: pentru n=15, descompunerile
posibile sunt: 15=1+2+3+4+5,15=4+5+6 si 15=7+8.

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"; }

11 Generarea perechilor de numere neconsecutive din intervalul


[a,b] care îndeplinesc o condiţie dată
Sa se genereze toate perechile neconsecutive din intervalul [a,b] cu proprietatea ca primul
numar prim, iar al doilea neprim

#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

S-ar putea să vă placă și