Deplasări la dreapta (inserări)

Scrieți un program care să insereze numărul x pe poziția p în vectorul v(v cu n numere).

#include <iostream>

using namespace std;

int main()
{
    int x,p,v[101],i,n;
    cin>>n;
    for(i=1;i<=n;++i)cin>>v[i];
    cin>>x>>p;
    for(i=n;i>=p;--i)v[i+1]=v[i];
    v[p]=x;
    ++n;
    for(i=1;i<=n;++i)cout<<v[i]<<" ";
    return 0;
}

Deplasări la stânga (eliminări)

Scrieți un program care să elimine toate aparițiile numărului x din vectorul v(v cu n elemente).

#include <iostream>

using namespace std;

int main()
{
    int x,v[101],i,j,n;
    cin>>n;
    for(i=1;i<=n;++i)cin>>v[i];
    cin>>x;
    for(i=1;i<=n;++i)
        if(v[i]==x)
    {
        for(j=i;j<=n-1;++j)v[j]=v[j+1];
        --n;--i;
    }
    for(i=1;i<=n;++i)cout<<v[i]<<" ";
    return 0;
}

Maxime și minime multiple

1.Minim

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    int v[101],min1=INT_MAX,min2=INT_MAX,i,n;
    cin>>n;
    for(i=1;i<=n;++i)cin>>v[i];
    for(i=1;i<=n;++i)
    {
        if(v[i]<min1)
        {
            min2=min1;
            min1=v[i];
        }
        else if(v[i]<min2)min2=v[i];
    }
    cout<<min1<<" "<<min2;
    return 0;
}

2.Maxim

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    int v[101],max1=INT_MIN,max2=INT_MIN,i,n;
    cin>>n;
    for(i=1;i<=n;++i)cin>>v[i];
    for(i=1;i<=n;++i)
    {
        if(v[i]>max1)
        {
            max2=max1;
            max1=v[i];
        }
        else if(v[i]>max2)max2=v[i];
    }
    cout<<max1<<" "<<max2;
    return 0;
}

Dacă avem nevoie de prea multe valori maxime sau minime, în loc să luăm mai multe variabile vom ordona vectorul (des)crescător și vom afișa numărul de maxime/minime necesar.

Maxime și minime simple

1.Minim

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    int v[101],min=INT_MAX,i,n;
    cin>>n;
    for(i=1;i<=n;++i)
    {
        cin>>v[i];
        if(v[i]<min)min=v[i];
    }
    cout<<min;
    return 0;
}

2.Maxim

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    int v[101],max=INT_MIN,i,n;
    cin>>n;
    for(i=1;i<=n;++i)
    {
        cin>>v[i];
        if(v[i]>max)max=v[i];
    }
    cout<<max;
    return 0;
}

Perechi consecutive de 2/3 numere

  • 2 numere:

Dacă începem de la i=1, numărul consecutiv lui v[i] (primul număr din pereche) va fi v[i+1] (al doilea număr din pereche) și vom merge până la i=n-1.

Dacă începem de la i=2, numărul consecutiv lui v[i-1] (primul număr din pereche) va fi v[i] (al doilea număr din pereche) și vom merge până la i=n.

  • 3 numere:

Dacă începem de la i=1, numerele consecutive lui v[i] (primul număr din pereche) vor fi v[i+1] (al doilea număr din pereche) și v[i+2] (al treilea număr din pereche) și vom merge până la i=n-2.

Dacă începem de la i=2, numerele consecutive lui v[i-1] (primul număr din pereche) vor fi v[i] (al doilea număr din pereche) și v[i+1] (al treilea număr din pereche) și vom merge până la i=n-1.

Dacă începem de la i=3, numerele consecutive lui v[i-2] (primul număr din pereche) vor fi v[i-1] (al doilea număr din pereche) și v[i] (al treilea număr din pereche) și vom merge până la i=n.

 

Operații cu mulțimi (5/5): diferența

Pentru a realiza intersecția a 2 vectori (mulțimi), vom construi un al treilea vectori în care adăugăm doar elementele ce aparțin primului vector și nu celui de-al doilea.

#include <iostream>

using namespace std;

int main()
{
    unsigned a[101],b[101],c[202],n,m,k=0,i,j,ok;
    cin>>n;
    for(i=1;i<=n;++i)cin>>a[i];
    cin>>m;
    for(i=1;i<=m;++i)cin>>b[i];
    for(i=1;i<=n;++i)
    {
        ok=1;
        for(j=1;j<=m&&ok==1;++j)if(a[i]==b[j])ok=0;
        if(ok==1)c[++k]=a[i];
    }
    for(i=1;i<=k;++i)cout<<c[i]<<" ";
    return 0;
}

Operații cu mulțimi (4/5): intersecția

Pentru a realiza intersecția a 2 vectori (mulțimi), vom construi un al treilea vectori în care adăugăm doar elementele comune.

#include <iostream>

using namespace std;

int main()
{
    unsigned a[101],b[101],c[202],n,m,k=0,i,j,ok;
    cin>>n;
    for(i=1;i<=n;++i)cin>>a[i];
    cin>>m;
    for(i=1;i<=m;++i)cin>>b[i];
    for(i=1;i<=n;++i)
    {
        ok=0;
        for(j=1;j<=m&&ok==0;++j)if(a[i]==b[j])ok=1;
        if(ok==1)c[++k]=a[i];
    }
    for(i=1;i<=k;++i)cout<<c[i]<<" ";
    return 0;
}

Operații cu mulțimi (3/5): reuniunea

Pentru a realiza reuniunea a doi vectori (mulțimi) vom construi un al treilea vector în care mai întâi inserăm toate elementele primului vector, apoi le adăugăm pe cele care fac parte din al doilea dar nu din primul.

#include <iostream>

using namespace std;

int main()
{
    unsigned a[101],b[101],c[202],n,m,k,i,j,ok;
    cin>>n;k=n;
    for(i=1;i<=n;++i)cin>>a[i];
    cin>>m;
    for(i=1;i<=m;++i)cin>>b[i];
    for(i=1;i<=n;++i)c[i]=a[i];
    for(i=1;i<=m;++i)
    {
        ok=1;
        for(j=1;j<=n&&ok==1;++j)if(a[j]==b[i])ok=0;
        if(ok==1)c[++k]=b[i];
    }
    for(i=1;i<=k;++i)cout<<c[i]<<" ";
    return 0;
}

Operații cu mulțimi (2/5): construire de mulțime

Pentru a construi o mulțime dintr-un vector, va trebui să luăm un nou vector în care vor apărea elementele primului vector, repetate doar o dată.

#include <iostream>

using namespace std;

int main()
{
    unsigned v[101],u[101],n,i,j,k=0,ok;
    cin>>n;
    for(i=1;i<=n;++i)cin>>v[i];
    for(i=1;i<=n;++i)
    {
        ok=1;
        for(j=1;j<=k&&ok==1;++j)if(u[j]==v[i])ok=0;
        if(ok==1)u[++k]=v[i];
    }
    for(i=1;i<=k;++i)cout<<u[i]<<" ";
    return 0;
}