C/Visual C - arreglos con elementos repetidos

 
Vista:
Imágen de perfil de daniel

arreglos con elementos repetidos

Publicado por daniel (4 intervenciones) el 06/04/2015 14:57:53
sea un arreglo entero
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int a[8] ={2,4,7,2,3,4,7,7}
//
int a[8],i,j,cont=0;
a[8] ={2,4,7,2,3,4,7,7}
cout<<"\n";
for(i=0;i<8;i++){
for(j=0;j<8;j++){
if(a[i]==a[j])
cont++;
}
cout<<"el elemento "<<a[i]<<" se repite "<<cont<<" veces\n";
cont=0;
}
//

el problema es que me vota asi por ejemplo a[8] ={2,4,7,2,3,4,7,7}
2 se repite 2 veces
4 se repite 2 veces
7 se repite 3 veces
2 se repite 2 veces
3 se repite 1 veces
4 se repite 2 veces
7 se repite 3 veces
7 se repite 3 veces
pero yo quiero que me vote simplemente asi
2 se repite 2 veces
4 se repite 2 veces
7 se repite 3 veces
3 se repite 1 veces
necesito consejos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

arreglos con elementos repetidos

Publicado por aguml (272 intervenciones) el 09/04/2015 08:04:57
se me ocurren dos formas de hacer que no pase eso. La primera es usar un arreglo igual de tamaño en el que copias todo menos lo que coincida con el primero y muestras la cantidad de coincidencias y copias el arreglo resultante en el arreglo inicial. Repites hasta que el arreglo esté vacio. La segunda forma seria que los valores que buscas los añades a otro arreglo y la proxima vez compruebas que no esté y si ya está lo saltas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

arreglos con elementos repetidos

Publicado por aguml (272 intervenciones) el 09/04/2015 09:55:13
A continuacion te pongo los dos modos que te explico.
Modo 1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <string.h>
 
int main()
{
   int arrayPrincipal[10]={1,2,3,7,4,1,7,1,2,1};
   int aux[10];
   int x,y,pos,size=10,contador;
 
   for(x=0;x<size;)
   {
      pos=0;
      contador=0;
      memset(&aux,0,sizeof(int) * size);
      for(y=0;y<size;y++)
      {
         if(arrayPrincipal[x] != arrayPrincipal[y]){
            aux[pos++]=arrayPrincipal[y];
         }else{
            contador++;
         }
      }
 
      printf("El numero %d se repite %d veces\n",arrayPrincipal[x],contador);
      memset(&arrayPrincipal,0,sizeof(int) * size);
      size-=contador;
      memcpy(&arrayPrincipal, &aux, sizeof(int) * size);
   }
   return 0;
}
//---------------------------------------------------------------------------

Modo 2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
 
int main()
{
   int arrayPrincipal[10]={1,2,3,7,4,1,7,1,2,1};
   int aux[10];
   int x,y,i,pos=0,size=10,encontrado,contador;
 
   for(x=0;x<size;x++)
   {
      encontrado=0;
      for(i=0;i<pos;i++)
      {
         if(arrayPrincipal[x] == aux[i]){
            encontrado=1;
            break;
         }
      }
      if(encontrado == 0){
         aux[pos++]=arrayPrincipal[x];
         contador=0;
         for(y=x;y<size;y++)
         {
            if(arrayPrincipal[x] == arrayPrincipal[y]){
               contador++;
            }
         }
         printf("El numero %d se repite %d veces\n",arrayPrincipal[x],contador);
      }
   }
   return 0;
}
//---------------------------------------------------------------------------

Ambos funcionan correctamente pero cada uno tiene sus pros y contras.
Por ejemplo:
El primero tiene que estar copiando y limpiando continuamente los dos arrais usados mientras que el segundo no.
El primero usa 2 bucles mientras que el segundo usa 3.
El segundo usa mas variables pero menos librerias.
Y seguro que hay mas pero eso ya te lo dejo a ti.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar