Documente Academic
Documente Profesional
Documente Cultură
……………………………………………………………………………………………..
1. Divide et impera
int x[100], n;
int suma(int st, int dr)
{if(st==dr)
return x[st];
else
{int mij, s1,s2;
mij=(st+dr)/2;
s1=suma(st,mij);
s2=suma(mij+1,dr);
return s1+s2;
}
problema 1
—----------------------------------------------------------------------------------------------
#include <iostream>
cin>>n;
citire(n);
cout<<suma_recursiva(n);
cout<<endl;
cout<<suma_divide(1,n);
return 0;
}
problema 2
—----------------------------------------------------------------------------------------------
#include <iostream>
///recursiv
int maxim(int n, int i)
{
if(i<=n)
{
if(x[i]>maxi)
maxi=x[i];
return maxim(n,i+1);
}
return maxi;
}
///varianta divide
int maximd(int st, int dr)
{
if(st==dr)
return x[st];
else
{
int m, max1, max2;
m=(st+dr)/2;
max1=maximd(st,m);
max2=maximd(m+1,dr);
if(max1>max2)
return max1;
else
return max2;
}
}
int main()
{
cin>>n;
citire(n);
cout<<maxim(n,1)<<endl<<maximd(1,n);
return 0;
}
problema 3 ---------------------------------------------------------------------------------------------
Determinati numarul cu suma cifrelor maxima din sir. Daca sunt mai multe cu aceeași
suma returnati-l pe cel mai mic
caz particular
n=5
47 31 351 713 12
11 4 9 11 3
FUNCTII NECESARE
int suma-cif(int a)
void citire(int n)
int divide(int st, int dr)
TEMA 27 februarie
(multumim Irinucaaa)
VARIANTA 50
b)2
VARIANTA 51 NU EXISTA
VARIANTA 52
int f(int n)
{ if (n==0) return 0;
if(n%2==1)return n-f(n-1);
return f(n-1)-n
}
F(4) = 0
F(9)= 9
f(3) -4
↓
3-f(2)
↓
f(1)-2
↓
1-f(0)
↓
0
9-f(8)
↓
f(7)-8
↓
7-f(6)
↓
f(5)-6
↓
5-f(4)
↓ (ca mai sus)
…0
VARIANTA 53
int f(unsigned int n)
{
if (n==0) return 0;
else if(n%2==0)
return n%10+f(n/10);
else return f(n/10);
}
[10,20] … f(n)=0
11 13 15 17 19
VARIANTA 54
void f(int i)
{
if(i<=5) {
cout<<i<<” ” ;
f(i+1);
cout<<i/2<<” ”;
} } (in subiect nu era acolada la void asa ca am presupus ca acolo trebuia sa fie 😞😢)
F(1) = 1 2 3 4 5 2 2 1 1 0
↓
1 f(2) 0
↓
2 f(3) 1
↓
3 f(4) 1
↓
4 f(5) 2
↓
5 f(6) 2
GATAAA!!
EXERCITIUL 3
///Determinati numarul cu suma cifrelor maxima din sir. Daca sunt mai multe cu aceeași suma
returnati-l pe cel mai mic
#include <iostream>
}
}
int main()
{
cin>>n;
citire(n);
cout<<divide(1,n);
return 0;
return 0;
}
27/02/2024
problema ---------------------------------------------------------------------------------------------
#include <iostream>
///functie de divide
int div(int st, int dr)
{
if(st==dr)
return v[st];
else
{
}
}
///metoda iterativa
int aparitii()
{
int ap=0;
for(int i=1;i<=n;i++)
if(v[i]==x)
ap++;
return ap;
}
///metoda recursiva
int aparitii_r(int n)
{
if(n==0)
return 0;
if(v[n]==x)
return 1+aparitii_r(n-1);
return aparitii_r(n-1);
}
///divide
int divide(int st, int dr)
{
if(st==dr)
if(v[st]==x)
return 1;
else
return 0;
else
{
int mijl;
mijl=(st+dr)/2;
return divide(st,mijl)+divide(mijl+1,dr);
}
}
int main()
{
cin>>n;
citire(n);
cout<<"Valoarea cautata= ";
cin>>x;
cout<<aparitii();
cout<<endl;
cout<<aparitii_r(n);
cout<<endl;
cout<<divide(1,n);
return 0;
}
29/02/2024
problema ---------------------------------------------------------------------------------------------
Ex7 de la tema prin DIVIDE
problema ---------------------------------------------------------------------------------------------
Ex. n=5
5 6 9 13 14
#include <iostream>
JOC ONLINE
#include <iostream>
int main()
{
int n, x[50];
char a,b,c ;
cin>>n;
a='a';
b='b';
c='c';
hanoi(n,a,b,c);
return 0;
}