0% found this document useful (0 votes)
38 views11 pages

Algoritmi Info

The document contains 10 algorithms for solving various problems related to matrices and arrays. Some of the algorithms included are: finding the divisors of a number, greatest common divisor, checking if a number is prime, factorizing a number into prime factors, Fibonacci sequence, merging two sorted arrays, finding the maximum subarray sum, and binary search. The last few algorithms provided solutions for problems involving sorting and manipulating matrices.

Uploaded by

dariacorcodel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views11 pages

Algoritmi Info

The document contains 10 algorithms for solving various problems related to matrices and arrays. Some of the algorithms included are: finding the divisors of a number, greatest common divisor, checking if a number is prime, factorizing a number into prime factors, Fibonacci sequence, merging two sorted arrays, finding the maximum subarray sum, and binary search. The last few algorithms provided solutions for problems involving sorting and manipulating matrices.

Uploaded by

dariacorcodel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 11

ALGORITMI INFO

1. Divizorii unui nr
#include <iostream>
int main()
{
int n;
std :: cin >> n;
for(int d =1 ; d <= n ; d ++ )
if(n % d == 0)
std :: cout << d << " ";
return 0;
}
2. Cmmdc
#include <iostream>
int main()
{
int n , m;
std :: cin >> n >> m;
while(m != 0)
{
int r = n % m;
n = m;
m = r;
}
std :: cout << n << std :: endl;
return 0;
}
3.Verif prim
#include <iostream>
int main()
{
int n;
std :: cin >> n;
bool prim = true; // presupunem ca n este prim
if(n < 2)
prim = false; // 0 si 1 nu sunt prime
for(int d =2 ; d * d <= n ; d ++)
if(n % d == 0)
prim = false;
if(prim)
std :: cout << n << " este prim";
else
std :: cout << n << " nu este prim";
return 0;
}

4.desc in factori primi


#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int d = 2, p;
while(n > 1)
{
p = 0;
while(n % d == 0)
{
++p;
n /= d;
}

if(p)
cout << d << " " << p << endl;
++ d;

if(n>1 && d * d > n){


d = n;
}
}
return 0;
}

5.Fibonacci
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "n = ";
cin >> n;
int c,b, a;
a= 1;
b= 1;
cout << a<< "\n" << b<< "\n";
for(int i = 3; i <= n; i++)
{
c= b+a;
a=b;
b=c;
cout << c<< "\n";
}
return 0;
}

6.Interclasare
int n,a[100000], m , b[100000], p, c[200000];

//citire a[] cu n elemente


//citire b[] cu m elemente

int i = 0 , j = 0;
p = 0;
while(i < n && j < m)
if(a[i] < b[j])
c[p ++] = a[i ++];
else
c[p ++] = b[j ++];
while(i < n)
c[p ++] = a[i ++];
while(j < m)
c[p ++] = b[j ++];

7. Secventa de suma dintr-un interval dat


int n, X[100001], S[100001];
//citire n, X[]

S[0] = 0;

for(int i = 1 ; i <= n ; i ++)


S[i] = S[i-1] + X[i];

int st, dr; // capetele secvenței


//citire st,dr

cout << S[dr] - S[st-1];

8.suma max dintr-o secv


SP[0] = 0;
for(int i =1 ; i <= n ; i ++)
SP[i] = SP[i-1] + A[i];
int st = 0 , dr = 1 , Smax = -2000000000 , S;
for(int i = 1 ; i <= n ; ++ i)
for(int j=i;j<=n;++j)
{
S = SP[j] - SP[i-1];
if(S > Smax)
Smax = S, st = i, dr = j;
}
cout << Smax << endl;
cout << st << " " << dr;

9.Cautare binara
#include <iostream>
using namespace std;
const int N = 10;
int V[N] = {16, 27, 43, 45, 49, 60, 68, 81, 92, 96};
int CautareBinara(int x)
{
int Sol = -1, Left = 0, Right = N;
while(Left <= Right)
{
int Mid = (Left+Right) / 2;
if(V[Mid] == x)
{
Sol = Mid;
break;
}
if(V[Mid] > x)
Right = Mid - 1;
if(V[Mid] < x)
Left = Mid + 1;
}
return Sol;
}
int main()
{
cout << CautareBinara(43);
return 0;
}

10.Vectori de frecventa
#include <iostream>

using namespace std;

int n, fr[101];
int main()
{
cin >> n;
for(int i = 1; i <= n; i++) {
int x;
cin >> x;

fr[x]++;
}

for(int i = 1; i <= 100; i++) {


if(fr[i] > 0) {
cout << i << " apare de " << fr[i] << " ori in sir\n";
}
}
return 0;
}

Algoritm de ordonare crescatoare


# incluude <iostream.h> includem bibliotecile
void main ()
{int a[100][100],n,k,i,j,aux; declaram variabilele (n=numarul de
coloane si de linii si k=numarul colanei in care vor fi ordonate elementele)
cin>>n>>k;
for(i=1;i<=n;i++) citim matricea

for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
if(a[i][k]>a[j][k]) verifcam care dintre numere este mai mic

{aux=a[i][k]; interschimbam numerele


a[i][k]=a[j][k];
a[j][k]=aux;
}
for(i=1;i<=n;i++) afisam matricea
{ for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}

Ordonarea descrescatoare
# incluude <iostream.h> includem bibliotecile
void main ()
{int a[100][100],n,k,i,j,aux; declaram variabilele (n=numarul de
coloane si de linii si k=numarul colanei in care vor fi ordonate elementele)
cin>>n>>k;
for(i=1;i<=n;i++) citim matricea

for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
if(a[i][k]<a[j][k]) verifcam care dintre numere este mai
mare

{aux=a[i][k]; interschimbam numerele


a[i][k]=a[j][k];
a[j][k]=aux;
}
for(i=1;i<=n;i++) afisam matricea
{ for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}

Se dă o matrice cu n linii şi m coloane şi elemente numere naturale. Să se ordoneze


liniile matricei crescător după suma elementelor.
#include <bits/stdc++.h>
using namespace std;
int n,m,k,a[101][101], v[101] , s[101];
int main()
{
cin>>n>>m;
for(int i=1 ; i <=n ; ++i)
for(int j=1 ; j<=m; ++j)
cin>>a[i][j], s[i]+=a[i][j];

for(int i=1 ; i<=n ; ++i)


v[i]=i;

for(int i=1 ; i<n ; ++i)


for(int j=i+1 ; j<=n ; ++j)
if(s[v[i]]>s[v[j]])
swap(v[i],v[j]);

for(int i=1 ; i<=n ; ++i)


{
for(int j=1 ; j<=m ; ++j)
cout<<a[v[i]][j]<<" ";
cout<<endl;
}
return 0;
}
Gigel a găsit o matrice cu n linii și m coloane și elemente numere naturale. El își
propune să determine, pentru fiecare linie, cea mai mică valoare care se poate
obține adunând elementele de pe linie, cu excepția unuia.

#include <iostream>

using namespace std;

int main()
{
int v[101][101], n, m, maxi;
cin>>n>>m;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cin>>v[i][j];
for(int i=0; i<n; i++)
{
int s=0;
maxi=v[i][0];
for(int j=0; j<m; j++)
{
if(maxi<v[i][j])
maxi=v[i][j];
s+=v[i][j];

cout<<s-maxi<<" ";
}
return 0;
}

Se dă o matrice cu n linii și m coloane și elemente numere naturale. Să se determine


câte dintre elementele situate pe linii cu indici pari sunt prime.

#include <bits/stdc++.h>

using namespace std;

int prim(int n)

if(n==0 || n==1) return 0;

if(n==2) return 1;

if(n%2==0) return 0;
for(int i=3;i*i<=n;i=i+2)

if(n%i==0) return 0;

return 1;

int main()

int n,m,c=0;;

int a[102][102];

cin >> n >> m;

for(int i=1;i<=n;++i)

for(int j=1;j<=m;++j)

cin >> a[i][j];

for(int i=2;i<=n;i=i+2)

for(int j=1;j<=m;++j)

if(prim(a[i][j])) c++;

cout <<c;

return 0;

Cerința
Se dă o matrice cu n linii și m coloane și elemente numere naturale. Să se permute
coloanele matricei circular spre stânga cu o poziție.

#include <bits/stdc++.h>

using namespace std;

int main()

int n,m,a[102][102];

cin>>n>>m;

for(int i=0; i<n; i++)

for(int j=0; j<m; j++)

cin>>a[i][j];

for(int i=0; i<n; i++)

for(int j=0; j<m-1; j++)

swap(a[i][j], a[i][j+1]);

for(int i=0; i<n; i++)

for(int j=0; j<m; j++)

cout<<a[i][j]<< ' ';

cout<<endl;

return 0;

Se dă o matrice cu n linii şi m coloane şi elemente numere naturale. Să se determine


elementul cu număr maxim de apariții în matrice. Dacă există mai multe elemente
cu număr maxim de apariții se va afișa cel mai mare dintre ele.
#include <bits/stdc++.h>

using namespace std;

int f[1000001]={0};

int main()

int n, m, a[102][102], v[10000], p=0, maxi=0, ok = 0;

cin>>n>>m;

for(int i=0 ; i<n ; ++i)

for(int j=0; j<m; ++j)

cin>>a[i][j];

v[p]=a[i][j];

p++;

f[a[i][j]]++;

if(f[a[i][j]]>maxi)

maxi=f[a[i][j]];

sort(v, v+p);

for(int i=0; i<p ;++i)

if(f[v[i]]==maxi)

ok=v[i];

cout<<ok;

return 0;

You might also like