You are on page 1of 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