Informatică, întrebare adresată de 12numaieu45, 9 ani în urmă

Buna! Daca am un vector si spune sa elimin din tablou un numar minim de elemente astfel incat sa nu existe doua elemente alaturate cu valoarea 0.
Exemplu: daca am 0 2 0 0 0 0 -7 0 0 3 5 se va afisa 0 2 0 -7 0 3 5 .
Ma puteti ajuta?


artur99: c++?
artur99: cea mai eficienta metoda este asta: sa rescrii toate valorile in alt vector, facand un skip cand dai de 0 consecutiv

Răspunsuri la întrebare

Răspuns de artur99
3
#include <iostream>

using namespace std;

int main(){
    int n, k, last;
    cout<<"n=";
    cin>>n;
    int v[n], v2[n];
    for(int i=0;i<n;i++){
        cout<<"v["<<i<<"]=";
        cin>>v[i];
    }
    v2[0]=v[0];
    last=v[0];
    k=1;
    for(int i=1;i<n;i++){
        //Parcurgem vectorul de la al 2-lea element
        if(last!=0||v[i]!=0){
            //Daca ultimul element adaugat este diferit de 0, sau daca elementul curent este diferit de 0
            v2[k]=v[i];
            k++;
            last=v[i];
        }
    }
    for(int i=0;i<k;i++){
        cout<<v2[i]<<" ";
    }
    return 0;
}

**************************************
IF-ul ala functioneaza astfel: daca ultimul element adaugat in v2 a fost 0(last==0), pentru a adauga un numar trebuie ca numarul curent sa fie diferit de 0(v[i]!=0 - deci una din conditii a fost indeplinita), deci să fi trecut de tot sirul de 0.  Daca ultimul element nu este 0, iar elementul curent este 0, atunci avem deja indeplinita una din conditii, deci va fi introdus un 0, ce va reprezenta primul 0 dintr-un sir de mai multi de 0, avand in vedere ca doar asta trebuie scos...
Alte întrebări interesante