Programação Imperativa

100 Questões Fichas Testes/Exames

Questão 33: elimRep

Voltar

Defina uma função int elimRep (int v[], int n) que recebe um vetor v com n inteiros e elimina as repetições. A função deverá retornar o número de elementos do vetor resultante.

Exemplo

> int v[10] = {1, 2, 3, 2, 1, 4, 2, 4, 5, 4};
> elimRep(v, 10)
(int) 5
> v
(int [10]) {3,1,2,5,4} // por exemplo, a ordem dos elementos é irrelevante

Resolução

void tail(int *v, int N) {
    int i;
    for(i = 1; i < N; i++)
        v[i-1] = v[i];
}

int elem(int e, int *v, int N) {
    int i, ans = 0;
    for(i = 0; i < N && !ans; i++)
        if(e == v[i])
            ans = 1;
    return ans;
}

int elimRep (int v[], int n) {
    int i = 0;
    while(i < n) {
        if(elem(v[i], v+i+1, n-i-1)) { tail(v+i,n-i); n--; }
        else i++;
    }
    return i;
}