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.....
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