Divetimpera
Divetimpera
+2n-divide et impera
#include<iostream.h>
int v[102],n;
void divizeaza(int s,int d,int &m)
{ m=(s+d)/2;}
void combina(int x,int y,int &z)
{ z=x+y;}
void dei(int s,int d, int &z)
{ int m,x,y;
if(d==s) z=2*v[s];
else
{ divizeaza(s,d,m);
dei(s,m,x) ;
dei(m+1,d,y);
combina(x,y,z); }
}
void main()
{
int i,z;cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"v["<<i<<"]="; cin>>v[i]; }
dei(1,n,z);
cout<<"suma="<<z;
}
------------------------------------------------------2.//suma primelor n nr naturale
#include<iostream.h>
int n,pr; int sum;
void suma(int s,int d, int&sum)
{
int sum1,sum2;
if(s==d) sum=s;
else {suma(s,(s+d)/2,sum1);
suma((s+d)/2+1,d,sum2);
sum=sum1+sum2; }
}
void main()
{
cout<<"n=";cin>>n;
suma(1,n,sum);
cout<<"suma="<<sum;}
--------------------------------------------3.//prod 1*2*3*...*n
#include<iostream.h>
int n,pr;
void produs(int s,int d, int&pr)
{
int pr1,pr2;
if(s==d) pr=s;
else {produs(s,(s+d)/2,pr1);
produs((s+d)/2+1,d,pr2);
pr=pr1*pr2;
}
}
void main()
{
cout<<"n=";cin>>n;
produs(1,n,pr);
cout<<"produs="<<pr;}
-------------------------------------------------4.//prod nr pare din sir
#include<iostream.h>
int n,pr,v[100],i;
void produs(int s,int d, int&pr)
{
int pr1,pr2;
if(s==d) if(v[s]%2==0) pr=v[s];
else pr=1;
else {produs(s,(s+d)/2,pr1);
produs((s+d)/2+1,d,pr2);
pr=pr1*pr2;
}
}
void main()
{
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"v["<<i<<"]=";
cin>>v[i];
}
produs(1,n,pr);
cout<<"produs="<<pr;}
----------------------------------------5.//maximul elementelor din matrice div et impera
#include<iostream.h>
int n,max,v[10][10],i,j;
void maxim( int v[10][10],int s,int d, int&max)
{
int max1,max2;
if(s==d){ max1=v[s][1];
for(j=1;j<=n;j++)
if (max1<v[s][j])max1=v[s][j];
max=max1; }
else {maxim(v,s,(s+d)/2,max1);
maxim(v,(s+d)/2+1,d,max2);
if(max1>max2)max=max1;
else max=max2; }
}
void main()
{
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"mat["<<i<<','<<j<<"]="; cin>>v[i][j]; }
1
maxim(v,1,n,max);
cout<<"maxim="<<max;}
-----------------------------------------6.//nr elem pare -in mod standard
#include<iostream.h>
int v[100],n;
void divizeaza(int s,int d,int &m)
{ m=(s+d)/2;}
void combina(int x,int y,int &z)
{ z=x+y;}
void dei(int s,int d, int &z)
{ int m,x,y;
if(d==s)
if(v[s]%2==0) z=1;
else z=0;
else
{
divizeaza(s,d,m);
dei(s,m,x) ;
dei(m+1,d,y);
combina(x,y,z);
}
}
void main()
{
int i,z;cout<<"n=";cin>>n;
for(i=5;i<=12;i++)
{
cout<<"v["<<i<<"]=";
cin>>v[i];
}
dei(5,12,z);
cout<<"nr elem pare="<<z;
}
------------------------------------------------7.//max elem pare
#include<iostream.h>
int n,max,v[100],i;
void maxim(int s,int d, int&max)
{
int max1,max2;
if(s==d) if(v[s]%2==0) max=v[s];
else max=0;
else {maxim(s,(s+d)/2,max1);
maxim((s+d)/2+1,d,max2);
if (max1>max2) max=max1;
else max=max2; }
}
void main()
{
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"v["<<i<<"]="; cin>>v[i];
}
maxim(1,n,max);
cout<<"maximul="<<max;}
---------------------------------------------8.//sortare rapida(QUIksort) prin div et impera
#include<iostream.h>
int x[100],n;
void schimb(int &a,int &b)
{ int aux=a;a=b;b=aux;}
/* sau
void divizeaza(int s,int d,int &m)
{ int i,pi,pj,j;
i=s;j=d;pi=0;pj=1 ;
while(i<j)
{
if(x[i]>x[j]) {schimb(x[i],x[j]);
schimb(pi,pj);}
i=i+pi;j=j-pj;}
m=i;} */
void divizeaza(int s,int d,int &m)
{
int pivot=x[s],i=s,j=d;
while(i<j)
{ while(x[i]<pivot)i++;
while(x[j]>pivot)j--;
if(i<j) schimb(x[i],x[j]);}
m=i;}
void quiksort(int s,int d)
{
int m;
if(s<d) {divizeaza(s,d,m);
quiksort(s,m-1);
quiksort(m+1,d);}
}
void main()
{
int i;cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x["<<i<<"]=";cin>>x[i];}
quiksort(1,n);
cout<<"vect sort e="<<endl;
for(i=1;i<=n;i++)
cout<<x[i]<<" ";
}
-------------------------------------9.//sum el poz din matrice
#include<iostream.h>
int n,v[10][10]; int sum,i,j;
void suma(int v[10][10],int s,int d, int&sum)
{
int sum1,sum2;
2
if(s==d){ sum=0;
for(j=1;j<=n;j++)if(v[s][j]>0)
sum=sum+v[s][j];
}
else {suma(v,s,(s+d)/2,sum1);
suma(v,(s+d)/2+1,d,sum2);
sum=sum1+sum2; }
}
void main()
{
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"mat["<<i<<','<<j<<"]=";
cin>>v[i][j];
}
suma(v,1,n,sum);
cout<<"suma="<<sum;
}
-----------------------------------------------10.//afisare elem de sub dg pp , div et imp
#include<iostream.h>
int n,nr,v[10][10],i,j;
void cit_mat(int v[10][10],int s,int d)
{int j;
if(s==d) for(j=1;j<=n;j++) cin>>v[s][j];
else {cit_mat(v,s,(s+d)/2);
cit_mat(v,(s+d)/2+1,d); }
}
void afis_mat(int v[10][10],int s,int d)
{
int j;
if(s==d) { for(j=1;j<=s-1;j++)
cout<<v[s][j]<<" "; cout<<endl;}
else {afis_mat(v,s,(s+d)/2);
afis_mat(v,(s+d)/2+1,d);}
}
void main()
{ cout<<"n=";cin>>n;
cout<<"mat ciy="<<endl;
cit_mat(v,1,n);
afis_mat(v,1,n); }
----------------------------------11.//prod elem din matr
#include<iostream.h>
int n,pr,v[10][10],i,j;
void produs( int v[10][10],int s,int d, int&pr)
{
int pr1,pr2;
if(s==d){ pr1=1;
for(j=1;j<=n;j++)
pr1=pr1*v[s][j];
pr=pr1; }
else {produs(v,s,(s+d)/2,pr1);
produs(v,(s+d)/2+1,d,pr2);
pr=pr1*pr2;}
}
void main()
{
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"mat["<<i<<','<<j<<"]=";
cin>>v[i][j];
}
produs(v,1,n,pr);
cout<<"produs="<<pr;}
-----------------------------------12.//algoritmul de interclasare a 2 vectori deja sortati
#include<iostream.h>
int a[10],n;
void sort(int s, int d, int a[10])
{int m;
if(a[s]>a[d]){m=a[s];a[s]=a[d];a[d]=m;}}
void interclasare(int s,int d,int m, int a[10])
{
int b[10],i,j,k;
i=s;j=m+1;k=1;
while(i<m && j<d) if(a[i]<=a[j]) b[k++]=a[i++];
else b[k++]=a[j++];
if(i<=m)for(j=i;j<=m;j++)b[k++]=a[j];
else for(i=j;j<=d;j++)b[k++]=a[i];
for(i=s;i<=d;i++)
a[i]=b[k++];}
void divimpera(int s, int d, int a[10])
{int m;
if(s==d)sort(s,d,a);
else {m=(s+d)/2;
divimpera(s,m,a);
divimpera(m+1,d,a);}}
void main()
{
int i;cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";cin>>a[i];}
divimpera(1,n,a);
cout<<"vect sort e="<<endl;
for(i=1;i<=n;i++)
cout<<a[i]<<" "; }
--------------------------------------------------13.// citeste si afiseaza numai elem div cu 3 din mat
prin div et impera
#include<iostream.h>
3
int n,nr,v[10][10],i,j;
void cit_mat(int v[10][10],int s,int d)
{int j;
if(s==d) for(j=1;j<=n;j++) cin>>v[s][j];
else {cit_mat(v,s,(s+d)/2);
cit_mat(v,(s+d)/2+1,d); } }
void afis_mat(int v[10][10],int s,int d)
{ int j;
if(s==d) { for(j=1;j<=n;j++) if(v[s][j]%3==0)
cout<<v[s][j]<<" ";
cout<<endl;}
else {afis_mat(v,s,(s+d)/2);
afis_mat(v,(s+d)/2+1,d); }
}
void main()
{ cout<<"n=";cin>>n;
cout<<"mat ciy="<<endl;
cit_mat(v,1,n);
afis_mat(v,1,n);
}
---------------------------------------------14.// citeste mat afiseaza suma elem div cu 3 din mat
prin div et impera
#include<iostream.h>
int n,nr,v[10][10],i,j,sum;
void cit_mat(int v[10][10],int s,int d)
{int j;
if(s==d) for(j=1;j<=n;j++) cin>>v[s][j];
else {cit_mat(v,s,(s+d)/2);
cit_mat(v,(s+d)/2+1,d); }
}
void afis_mat(int v[10][10],int s,int d)
{ int j;
if(s==d) { for(j=1;j<=n;j++) cout<<v[s][j]<<" ";
cout<<endl;}
else {afis_mat(v,s,(s+d)/2);
afis_mat(v,(s+d)/2+1,d);}
}
void suma(int v[10][10],int s,int d, int&sum)
{ int sum1,sum2;
if(s==d){ sum=0;
for(j=1;j<=n;j++)if(v[s][j]%3==0)
sum=sum+v[s][j];
}
else {suma(v,s,(s+d)/2,sum1);
suma(v,(s+d)/2+1,d,sum2);
sum=sum1+sum2; }
}
void main()
{
cout<<"n=";cin>>n;
cout<<"mat ciy="<<endl;
cit_mat(v,1,n);
afis_mat(v,1,n);
suma(v,1,n,sum);
cout<<"suma="<<sum;}