Documente Academic
Documente Profesional
Documente Cultură
1. Interschimb
a) Cu auxiliar
aux=a;a=b;b=aux;
b) Fara auxiliar
a=a+b;
b=a-b;
a=a-b;
2. Maxime și minime
Să rezolvăm următoarea problemă: Se dau n numere întregi. Calculaţi cel mai
mic dintre cele n numere date.
a) inițializăm min cu prima dintre cele n valori; celelalalte n-1 valori se
vor compara cu min
3. cin >> n >> x;
4. min = x;
5. for(int i =2 ; i <=n ; i ++)
6. {
7. cin >> x;
8. if(x < min)
9. min = x;
10. }
Rezolvare:
#include <iostream>
f) cifra de control
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ă poartă numele de cifră de control.
while (n>9) // algoritmul continua pana cand se obtine o singura cifra
{
s=0;
while (n>0) //calculul sumei cifrelor lui n
{
s=s+n%10;
n=n/10;
}
n=s; // n preia valoarea sumei cifrelor
}
cout<<s;// s obtinut astfel reprezinta cifra de control
Obs. Putem afla cifra de control calculând restul împărțirii numărului la 9. Dacă restul
este 0 atunci cifra de control este 9, altfel este acel rest.
if(n%9==0)
c=9;
else
c=n%9;
cout<<c;
4. Divizibilitate
a) afisarea (prelucrarea) divizorilor unui numar
#include <iostream> int main() if(n%d==0)
using namespace std; { cin>>n; cout<<d<<' ';
int n,d; for(d=1;d<=n;d++) return 0;
} cout<<d<<' '; for(d=1;d*d<n;d++)
cout<<n; if(n%d==0)
return 0; cout<<d<<' '<<n/d<<' ';
} if(d*d==n)
cout<<d;
return 0;
}
#include <iostream>
using namespace std;
int n,d; #include <iostream>
int main() using namespace std;
{ cin>>n; int n,d;
Aplicatii:
for(d=1;d<=n/2;d++) int main()
#376
if(n%d==0) { cin>>n;
#include <iostream>
using namespace std;
int n,d;
long long int s=0;
int main()
{ cin>>n;
for(d=1;d*d<n;d++)
if(n%d==0)
s=s+d+n/d;
if(d*d==n)
s=s+d;
cout<<s;
return 0;
}
#377
#include <iostream>
using namespace std;
int n,d,a,b;
int main()
{ cin>>n;
for(d=1;d*d<n;d++)
if(n%d==0)
{a=d;b=n/d;}
if(d*d==n)
cout<<d<<' '<<d;
else
cout<<a<<' '<<b;
return 0;
}
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
long long int n,s=0,k=0,d;
double ma;
int main()
{
cin>>n;
for(d=1; d*d<n; d++)
if(n%d==0)
{
s=s+d+n/d;
k=k+2;
}
if(d*d==n)
{
s=s+d;k++;
}
ma=(float)s/k;
ma=(floor(ma*100))/100;
cout<<fixed<<setprecision(2)<<ma;
return 0;
}
eficient
#include <iostream>
using namespace std;
int n,d,prim;
int main()
{ cin>>n;
prim=1; //presupun ca numarul este prim
if(n<2 || n%2==0 && n!=2) //numerele 0,1 sau numerele pare diferite de 2 nu sunt numere prime
prim=0; //comuta pe 0
d=3; //se porneste cu verficarea numerelor impare cu primul divizor impar
while(d*d<=n && prim==1) // cat timp nu am ajuns cu d la radical de n si prim este 1
if(n%d==0) // daca d il divide pe n
prim=0; //numarul nu e prim
else
d=d+2; //se cauta alti divizori posibili impari
if (prim==1)
cout<<”este prim”;
else
cout<<”nu este prim”;
return 0;
}
#373
#include <iostream>
#375
#include <iostream>
using namespace std;
int n, x, d, prim;
int main()
{
cin>>n;
x=n+1;
prim=0;
while(prim==0)
{
prim=1;
if(x<2 || x%2==0 && x!=2)
prim=0;
d=3;
while(d*d<=x && prim==1)
if(x%d==0)
prim=0;
else
d=d+2;
if(prim==1)
cout<<x;
else
x=x+1;
}
return 0;
}
c) determinarea celui mai mare divizor comun dintre doua numere date
(cmmdc)
// euclid
#include <iostream>
using namespace std;
int a,b,r;
int main()
{
cin>>a>>b; //p=a*b
do
{
r=a%b;
a=b;
b=r;
}
while(b!=0);
cout<<a; //cmmmc=p/a
return 0;
}
//prin scaderi
#include <iostream>
using namespace std;
int a,b,r;
int main()
{
cin>>a>>b; //p=a*b
while(a!=b)
if(a>b)
a=a-b;
else
b=b-a;
cout<<a; //cmmc=p/a
return 0;
}
// prin impartiri
#include <iostream>
using namespace std;
int a,b;
int main()
{
cin>>a>>b; //p=a*b
while(a*b!=0)
if(a>b)
a=a%b;
else
b=b%a;
if(a+b!=0)
cout<<a+b; //cmmc=p/(a+b);
else
cout<<”eroare”;
return 0;
}
OBS. Pentru determinarea celui mai mic multiplu comun (cmmmc) dintre doua numere se imparte
produsul lor la cmmdc dintre ele a*b/(cmmdc(a,b));
{n=n/d;
p=p+1;
}
if(p>0)
cout<<d<<" la puterea: "<<p<<endl;
d=d+1;
}
return 0;
}
//mai eficient
#include <iostream>
using namespace std;
int n, d, p;
int main()
{
cin>>n;
d=2;
while(n>1)
{
p=0;
while(n%d==0)
{
n=n/d;
p=p+1;
}
if(p>0)
cout<<d<<" la puterea: "<<p<<endl;
if(d*d>n)
d=n;
else
d=d+1;
}
return 0;
}
Sirurile recurente sunt sirurile in termenii se construiesc dupa o anumita regula in functie
de termenii anteriori.
a0=1;
a1= 1;
an=an-1+an-2