Sunteți pe pagina 1din 11

Algoritmi C++

Suma cifrelor

int sumCif(int x){


int sum = 0;
do {
sum = sum + x % 10;
x = x / 10;
} while (x);
return sum;
}

Oglingitul unui numar

int ogl(int x){


int ogl = 0;
while(x) {
ogl = ogl * 10 + x % 10;
x = x / 10;
}

return ogl;
}

Verificare daca x e palindrom

bool isPalindrom(int x){


bool palindrom = false;
if(x == ogl(x)){
palindrom = true;
}
Algoritmi C++

return palindrom;
}

Puterea lui 10 egala cu numarul de cifre al lui


x

int getPower(int x){


int px = 1;
do {
px = px * 10;
x = x / 10;
} while (x);

return px;
}

Cel mai mare divizor comun

long long cmmdc(long long x, long long y){


while(y){
long long r = x % y;
x = y;
y = r;
}
return x;
}

Cel mai mic multiplu comun

long long cmmmc(long long x, long long y){


long long num = (x * y) / cmmdc(x, y);
return num;
}
Algoritmi C++

Verificare daca x e prim

bool isPrim(int x){


bool prim = true;
if(x < 2 || x > 2 && x % 2 == 0){
prim = false;
}
for(int d = 3; d * d <= x, prim; d += 2){
if(x % d == 0){
prim = false;
}
}

return prim;
}

///numar divizori eficient


int getDivs(int x){
int nrdiv = 1;
int d, p;
for(p = 0; x % 2 == 0; x /= 2, p++);
if(p > 0)
nrdiv = nrdiv * (p + 1);
for(d = 3; d * d <= x; d += 2) {
for(p = 0; x % d == 0; x /= d, p++);
if(p > 0)
nrdiv = nrdiv * (p + 1);
}
if(x > 1)
nrdiv = nrdiv * 2;

return nrdiv;
}

/// VECTORI
Algoritmi C++

//stergere

void stergere1(int a[], int &n)


{
for(int i = 0; i < n; i++)
if(a[i]%2 == 0)
{
for(int j=i+1;j<n;j++)///se muta
elementele de dupa cu o pozitie la stanga
a[j-1]=a[j];
n--;
i--;///ne dam inapoi dat fiind ca
pe pozitia i se gaseste acum un alt element
}
}
/Ștergerea elementelor pare dintr-un vector –
algoritm în
complexitate liniara O(n), fără vector
auxiliar*/
void stergere2(int a[], int &n)
{
int sterse = 0;
for(int i = 0; i < n; i++)
if(a[i]%2 == 0)
sterse++;
else
a[i - sterse] = a[i];
n = n - sterse;
}
/Ștergerea elementelor pare dintr-un vector –
algoritm cu
vector auxiliar*/
void stergere3(int a[], int n, int b[], int &m)
{
m = 0;
for(int i = 0; i < n; i++)
Algoritmi C++

if(a[i]%2 == 1)
b[m++] = a[i];
}

///inserare

/Inserarea unei valori date v după fiecare


element par
dintr-un vector – algoritm în
complexitate O(n^2), fără vector
auxiliar*/
void inserare1(int a[],int &n,int v)
{
for(int i = 0; i < n; i++)
if(a[i]%2 == 0)
{
for(int j = n-1; j > i; j--)///mut
elementele de dupa cu o pozitie mai la dreapta
a[j+1] = a[j];
a[i+1] = v;
i++;///sar peste elementul inserat
n++;///cresc numarul de elemente
}
}
/Inserarea unei valori date v după fiecare
element par
dintr-un vector – algoritm în
complexitate O(n), fără vector
auxiliar/
void inserare2(int a[],int &n,int v)
{
int inserate = 0;
for(int i = 0; i < n; i++)
if(a[i]%2 == 0)
inserate++;
int inserate1 = inserate;
Algoritmi C++

for(int i = n-1; i >= 0; i--)


{
if(a[i]%2 == 0)
{
a[i+inserate] = v;
inserate--;
}
a[i+inserate] = a[i];
}
n = n + inserate1;
}
/**Inserarea unei valori date v după fiecare
element par
dintr-un vector – algoritm cu vector auxiliar/

void inserare3(int a[], int n, int b[], int &m,


int v)
{
m = 0;
for(int i = 0; i < n; i++)
{
b[m++] = a[i];
if(a[i]%2 == 0)
b[m++] = v;
}
}

void afisare(int a[], int n)


{
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}

int main()
Algoritmi C++

{
int n, a[100], m, b[200];
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
inserare1(a,n,10);
afisare(a,n);
inserare2(a,n,20);
afisare(a,n);
inserare3(a,n,b,m,30);
afisare(b,m);
//stergere1(a,n);
//afisare(a,n);
//stergere2(a,n);
// afisare(a,n);
stergere3(a,n,b,m);
afisare(b,m);
return 0;
}

///sortare
//// sortare prin interschimbare
/// crescatoare
#include <iostream>

using namespace std;


///sortatrea prin interschibmare
int main()
{
int a[100], n;
cin >> n;
for(int i = 0; i < n; i ++)
cin >> a[i];
for(int i = 0; i < n - 1; i ++)
for(int j = i + 1; j < n; j ++)
if(a[i] > a[j])
{
int aux = a[i];
Algoritmi C++

a[i] = a[j];
a[j] = aux;
}
for(int i = 0; i < n; i ++)
cout << a[i] << " ";
return 0;
}

/// sortarea prin metoda bulelor


int main()
{
int a[100], n, ok, p = 0;///p=nr de parcurgeri
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];

do
{
ok = 1;/// presupun sirul sortat
for(int i = 0;i < n - 1 - p; i++)
if(a[i] > a[i+1])
{
ok = 0;
int aux;
aux = a[i];
a[i] = a[i+1];
a[i+1] = aux;
}
p++;
}while(ok == 0);

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


cout << a[i] << " ";
return 0;
}
//interclasare
#include <iostream>
#include <fstream>
Algoritmi C++

using namespace std;


/// 241

int a[100000],b[100000],c[200000],n,m;
ifstream f("interclasare.in");
ofstream g("interclasare.out");

void citire()
{
f>>n;
for(int i=0;i<n;i++)
f>>a[i];
f>>m;
for(int i=0;i<m;i++)
f>>b[i];
}

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

void afisare()
{
for(int i=0;i<n+m;i++)
{
if(i>0 && i%10==0)
Algoritmi C++

g<<"\n";
g<<c[i]<<" ";
//if(i%10==9) g<<"\n";
}
}

int main()
{
citire();
interclasare();
afisare();
return 0;
}

///cautare binara
#include <fstream>
#include <iostream>

using namespace std;

int a[100],n,v;

int CB(){
int st = 0, dr = n - 1;
while(st <= dr){
int mij = (st + dr) / 2;
if(a[mij] == v)
return 1;
else
if(a[mij] < v)/// caut in a doua jumatate
st = mij + 1;
else /// caut in prima jumatate
dr = mij - 1;
}
return 0;
}

int main(){
ifstream fin("date.in");
Algoritmi C++

fin >> n >> v;


for(int i = 0; i < n; i++)
fin >> a[i];
cout << CB();
return 0;
}
pbinfo 508, 2789(cb3)

Ciurul lui Erastotene

void Eratostene(int n)///determin ciurul pana la val n


{
ciur[1]=1;
for(int i=2*2;i<=n;i=i+2)///"eliminam" multiplii
lui 2
ciur[i]=1;
for(int i=3;i*i<=n;i=i+2)
if(ciur[i]==0)///daca i este prim
for(int j=i*i;j<=n;j=j+i)///"eliminam"
multiplii lui i
ciur[j]=1;
}

bool ciur[50000001];///ciur[i]=0=> i este nr prim; ciur[i]=1=>


i nu este nr prim

void Eratostene(int n){


ciur[1] = 1;
for(int i = 2 * 2; i <= n; i = i + 2)
ciur[i] = 1;
for(int i = 3; i * i <= n; i = i + 2)
if(ciur[i] == 0)
for(int j = i * i; j <= n; j = j + i)
ciur[j] = 1;
}

S-ar putea să vă placă și