arreglo con varias modas

Iniciado por bobitttyy, 15 Abril 2015, 01:15 AM

0 Miembros y 1 Visitante están viendo este tema.

bobitttyy

quiero saber cual es el elemento que se repite en mayor cantidad.....pongo el cuerpo del código:

int a[9]={2,3,1,2,4,1,5,1,2};
int max=0,repite,masrep;
for(int i=0;i<9;i++){
repite=0;
for(int j=0;j<9;j++){
if(a[i]==a[j]){
repite++;
}
}
if(repite>max){
masrep=a[i];
max=repite;
}
}
cout<<"el elemnto que mas se repite es "<<masrep<<"\n";
cout<<"y se repite "<<max<<" veces";


el problema es que este arreglo tiene dos elementos que se repiten en mayor cantidad
y me bota asi:
EL ELEMENTO QUE MAS SE REPITE ES 2
pero yo quiero que me bote  no solo a uno sino también al otro
EL ELEMENTO QUE MAS SE REPITE ES 2
EL ELEMENTO QUE MAS SE REPITE ES 1
sugerencias.....

rir3760

Cita de: bobitttyy en 15 Abril 2015, 01:15 AMpero yo quiero que me bote  no solo a uno sino también al otro
EL ELEMENTO QUE MAS SE REPITE ES 2
EL ELEMENTO QUE MAS SE REPITE ES 1
sugerencias.
Para ello debes almacenar en un array la repetición de cada numero. Por simplicidad ese array lo inicializas a cero utilizando -1 como valor centinela para indicar que un numero es la repetición de algún otro anterior.

Para explicarlo mejor un ejemplo en C:
#include <stdio.h>
#include <stdlib.h>

#define PROCESADO  -1

#define NUM_ELEM(a) (sizeof (a) / sizeof (a[0]))

int main(void)
{
   int num[] = {2, 3, 1, 2, 4, 1, 5, 1, 2};
   int rep[NUM_ELEM(num)] = {0};
   size_t num_elem = NUM_ELEM(num);
   size_t i;
   size_t j;
   
   for (i = 0; i < num_elem; i++){
      if (rep[i] == PROCESADO)
         continue;
     
      rep[i] = 1;
      for (j = i + 1; j < num_elem; j++)
         if (num[i] == num[j]){
            rep[i]++;
            rep[j] = PROCESADO;
         }
   }
   
   for (i = 0; i < num_elem; i++)
      if (rep[i] != PROCESADO)
         printf("%d: %2d\n", num[i], rep[i]);
   
   return EXIT_SUCCESS;
}

Y su salida es:
2:  3
3:  1
1:  3
4:  1
5:  1


Espero que te de una idea para modificar tu programa en C++, la aproximación es la misma mas el calculo del máximo de repeticiones e imprimir los números que cumplan con ese criterio.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language