Professional Documents
Culture Documents
Algoritmi elementari
6.1. Probleme care operează asupra cifrelor unui număr
Calculati suma cifrelor Calculati produsul cifrelor Numarati cifrele numarului Determinati "oglinditul" verificati daca n e
numarului nєN. numarului nєN. natural n. numarului nєN. palindrom
int main(){ int main(){ int main(){unsigned int n, int main(){ int main(){
k=0;
unsigned int n, s=0; unsigned int n, p=1; unsigned int n, inv=0; unsigned int n,cn, inv=0;
cin>>n;
cin>>n; cin>>n; cin>>n; cin>>n; cn=n
while(n!=0){k++;
while(n!=0){ while(n!=0){ while(n!=0){ while(cn!=0){
n=n/10;}
s=s+n%10; p=p*(n%10); inv=inv*10+n%10; inv=inv*10+cn%10;
cout<<"nr_cifre= "<<k;
n=n/10;} n=n/10;} n=n/10;} cn=cn/10;}
return 0;}
cout<<"suma= "<<s; cout<<"produs= "<<p; cout<<"oglindit= "<<inv; if (n==inv)
cout<<"palindrom";
return 0;} return 0;} return 0;}
return 0;}
6.2. Divizibilitate. Numere prime. Algoritmul lui Euclid
Suma divizorilor Produsul divizorilor Numarul divizorilor Verificati daca n
numarului n numarului n numarului n eperfect(6=1+2+3)
int i,n,s=0; unsigned int i,n,p=1; unsigned int i,n,k=0; unsigned int i,n,s=0;
for(i=1; i<=n; i++) for(i=1; i<=n; i++) for(i=1; i<=n; i++) for(i=1; i<=n/2; i++)
6.3. Şirul lui Fibonacci. Calculul unor sume cu termenul general dat
Fie sirul Fibonacci 1, 1, 2, 3, 5, 8, 13, 21, 34, …..
Se observa ca primii doi termeni sunt egali cu 1, iar fiecare termen urmator este egal cu suma
celor doi termeni care il preced (f1=1;f2=1; f3=f1+f2, f4=f2+f3………..fn=fn-2+fn-1).
Fie n un numar citit de la tastatura. Sa se Afisati primii n termeni din sirul Fibonacci
scrie un program care sa afiseze cel de-al
n-lea termen al sirului Fibonacci.
#include<iostream.h> #include<iostream.h>
cin>>n; cin>>n;
f3=f1+f2; for(i=3;i<=n;i++){
f1=f2; f3=f1+f2;
} }
cin>>n; cin>>n;
} }
int a[20],aux,gasit;
void main ()
{cout<<"n=";cin>>n;
do{gasit=1;
for(i=0;i<n-1;i++)
gasit=0;}
}while(!gasit);
for (i=0;i<n;i++)
cout<<a[i]<<" ";}
6.6. Interclasare
Se citesc m numere sortate crescator (descrescator).
Se citesc n numere sortate crescator (descrescator).
Sa se afiseze cele m+n numere sortate crescator (descrescator).
include<iostream.h>
void main()
{int a[50],b[50],c[100]j,n,m,i,k;
cout<<“m=“;cin>>m ;
for (i=0;i<m;i++)cin>>a[i];
cout<<“n=“;cin>>n ;
for (i=0;i<n;i++)cin>>b[i];
i=j=k=0 ;
if(a[i]<b[j]) c[k++]=a[i++] ;
else c[k++]=b[j++] ;
for (i=0;i<k;i++)
#include <iostream.h>
int main(){
int i,n,a[100],ok=0;
cout<<"n=";cin>>n;
for(i=0;i<n;i++){cout<<"a["<<i<<"]=";
cin>>a[i];}
if(a[i]%2==0) ok++;
return 0;}
CAUTARE BINARA
include<iostream.h>
void main()
{int a[50],n,i,li,ls,k,nr,gasit ;
cout<<“nr=“;cin>>nr ;
cout<<“n=“;cin>>n ;
for (i=0;i<n;i++)cin>>a[i];
li=0 ;ls=n-1 ;gasit=0 ;
do{ k=(li+ls)/2 ;
gasit=1 ;}
else
if(a[k]>nr)li=k+1 ;
else ls=k-1 ;
- se alege o operatie de baza si se determina de cate ori se executa (se presupune ca restul operatiilor se executa de
un numar de ori proportional cu nr.executarii operatiei de baza)
- exista algoritmi cu complexitate polinomiala O(nk), exponentiala O(an), logaritmica O(log(n)) - cautarea binara.
ex.
- pentru a calcula valoarea maxima a unui sir de n numere reale se efectueaza n-1 comparatii
- pentru a determina daca n numere reale sunt distincte se efectueaza (n-1)+(n-2)+...+1 =n(n-1)/2 comparatii → are
complexitatea O(n2)
-a timpului de executare [se face o singura parcurgere a fisierului (parcurgere obligatorie)- algoritm liniar ].