How do I eleminate repeated numbers in c

3

My problem is that I can not delete repeated numbers. First thing my algorithm does is organize the elements, then in the method eleminar_numeros_repetidos copy to second vector that is vec1.only after I start to delete.

Arquivo função1.c: 

void organizar_vetor(int *vec, int n){

   int i,j;

   for(i=0 ; i <n-1; i=i+1)
   {
       for(j=i+1 ; j<n ; j=j+1)
       {
           if (*(vec +i) >*(vec+j))
           {
            int aux =*(vec+i);
            *(vec+i)=*(vec+j);
            *(vec+j)=aux;
           }

       }

   }
}

int eleminar_numeros_repetidos(int *vec, int n, int *vec1){

 organizar_vetor(vec,n);

 int i,j;

   for(i=0 ; i <n-1; i++)
   {
       for(j=i+1 ; j<n ; j++)
       {
           vec1[i]=vec[i];

            if (vec1[i] == vec1[j])
           {

            int k;   
              for (k = j; k <n-1 ; k++)
              {
                  vec1[k]=vec1[k+1];
                  j--;n--;
              }


           } 

       }

   }
   return n;

}
    
asked by anonymous 02.10.2016 / 01:03

1 answer

2

Surprisingly this problem is relatively complex.

To get clearer, I preferred to do a little test program, and I'm not doing the sorting (I already supply the numbers in order).

#include <stdio.h>

void printUnique(int* in, int n, int* out)
{
   printf("* -----------------\n");
   printf("* numero de items de entrada: %d\n", n);

   for (int i = 0; i < n ; i++)
       printf("* in[%d] = %d\n", i, in[i]);

   for (int i = 0; i < n; i++)
   {
       out[i] = in[i];

       for (int j = i + 1; j < n; j++)
       {
           if (in[i] == in[j])
           {
              // numeros em i e i+1 sao iguais, entao a partir de i+1,
              // deslocar todos os numeros 1 posicao 'a esquerda,
              // matando o numero repetido em i+1, e perdendo o ultimo
              // numero 'a direita...por isso, la' em baixo n vai precisar
              // ser decrementado, e j tambem vai precisar ser decrementado,
              // para comparar o numero em i com o novo numero em i+1
              for (int k = j+1; k < n; k++)
                  in[k-1] = in[k];
              n--; // total de numeros diminuiu
              j--; // precisa testar de novo a mesma posicao
           } // if
       } // for j
   } // for i

   printf("* numero de items unicos: %d\n", n);
   for (int i = 0; i < n; i++)
   {
       printf("* out[%d] = %d\n", i, out[i]);
   }
}

int main(void)
{
   int n;
   int in[10];
   int out[10];

   printUnique(in, 0, out);

   in[0] = 1;
   printUnique(in, 1, out);

   in[0] = 1; in[1] = 1;
   printUnique(in, 2, out);

   in[0] = 1; in[1] = 2;
   printUnique(in, 2, out);

   in[0] = 1; in[1] = 1; in[2] = 1;
   printUnique(in, 3, out);

   in[0] = 1; in[1] = 2; in[2] = 2;
   printUnique(in, 3, out);

   in[0] = 1; in[1] = 2; in[2] = 3;
   printUnique(in, 3, out);
}

See link

    
02.10.2016 / 05:23