Documente Academic
Documente Profesional
Documente Cultură
Divide Et Impera
Divide Et Impera
1. sa determinan suma elementelor unui vector de intregi utilizand metoda Divide et Impera:
int divide(int li,int ls) // functia primeste ca parametric extremitatile unei secvente din vector
{int mij, d1 ,d2; //mijlocul, d1 si d2 retin sumele pe extr. Stanga respective dreapta
if(li!=ls) //algoritmul se autoapeleaza daca secventele au lungime mai mare de 1
{mij=(li+ls)/2;
d1=divide(li,mij);
d2=divide(mij+1,ls);
return d1+d2;
}
else
return v[li];
}
void main()
{clrscr();
cout<<“n=”;
cin>>n;
for(int i=1;i<=n;i++)
{cout<<“v[“<<i<<“]=”;
cin>>v[i];}
cout<<“suma celor “<<n<<” elemente ale vectorului “<<divide(1,n);
return 0;
}
2. Aflarea maximului elementelor ale unui vector( Cu metoda Divide et Impera):
#include <iostream>
using namespace std;
int n,v[20],z;
void divide(int s,int d,int &m)
{
m=(s+d)/2;
}
void combina (int x1,int x2,int &z)
{
if(x1<x2) z=x2; else z=x1;
}
void dei(int s,int d,int &z)
{
int m,x1,x2;
if(s==d)
z= v[s];
else
{
divide(s,d,m);
dei(s,m,x1);
dei(m+1,d,x2);
if(x1<x2) z=x2; else z=x1;
}
}
int main ()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>v[i];
dei(1,n,z);
cout<<”maximul=”<<z;
return 0;
}
3. Aflarea sumei elementelor ale unui vector( Cu metoda Divide et Impera):
#include <iostream>
using namespace std;
int n,v[20],z;
void divide(int s,int d,int &m)
{
m=(s+d)/2;
}
void combina (int x1,int x2,int &z)
{
z=x1+x2;
}
void dei(int s,int d,int &z)
{
int m,x1,x2;
if(s==d)
if(v[s]<0) z=v[s];
else z=0;
else
{
divide(s,d,m);
dei(s,m,x1);
dei(m+1,d,x2);
combina(x1,x2,z);
}
}
int main ()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>v[i];
dei(1,n,z);
cout<<”suma=”<<z;
return 0;
}
// muta n discuri de pe tija S pe tija D folosind tija aux
Hanoi(n, S, D, aux) {
if (n >= 1) {
Hanoi(n - 1, S, aux, D); // mut n-1 discuri de pe sursa
(S) pe auxiliar (aux)
// in aceasta subproblema sursa
este S, destinatia este aux, intermediarul este D
int main()
{
int a[100],n,i;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
cout<<cmmdc(a,1,n);
system("pause");
return 0;
}
Turnurile din Hanoi.
#include<fstream>
using namespace std;
ifstream fin("h.in");
ofstream fout("h.out");
void hanoi(int n, char a, char b, char c,char t1[10], char t2[10], char
t3[10])
{
if(n>=1)
{
hanoi(n-1,a,c,b,t1,t3,t2);
int x=strlen(t2);
t2[x]=t1[strlen(t1)-1];
t2[x+1]=0;
strcpy(t1+strlen(t1)-1, t1+strlen(t1));
fout<<t1<<endl<<t2<<endl<<t3<<endl;
fout<<a<<"->"<<b<<endl<<endl;
hanoi(n-1,c,b,a,t3,t2,t1);
}
}
int main()
{
char t1[10]="A", t2[10]="B", t3[10]="C";
int n;
fin>>n;
for(int i=n;i>=1;i--) t1[n-i+1]=i+'0';
t1[n+1]=0;
hanoi(n,'A','B','C',t1,t2,t3);
fin.close();
fout.close();
}
Se citeste un vveeccttoorr cu n elemente numere naturale. Sa se calculeze suma
elementelor vectorului folosind divide et impera.
#include<iostream>
int main()
{
int a[100],n,i;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
cout<<suma(a,1,n);
system("pause");
return 0;
}
Se citeste un vector cu n elemente numere naturale. Sa se determine
elementul minim din vector folosind divide et impera.
#include<iostream>
}
}
int main()
{
int a[100];
int n ;
cin>> n;
for (int i = 0 ; i < n ;i++)
cin>>a[i];
system("pause");
return 0;
}