Contar elementos de un vector

Iniciado por estudiante_1, 18 Enero 2016, 01:16 AM

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

estudiante_1

Hola, quisiera saber un código que me dijera para un vector de 10 enteros que:
  El primer elemento esta repetido 2 veces
  El segundo elemento esta repetido 1 veces
.......... etc... Lo he intentado todo y no me sale. Gracias.
Al fin y al cabo es un programa que me diga cuantas veces aparece los elementos de un vector.

JavierScars

Si al menos pones algo que lleves... No hacemos tarea... :¬¬
Usa lo malo de la vida a tu favor, escala montañas de problemas para deslizarte sobre soluciones, derrumba muros de decepciones para encontrar la libertar de la felicidad,  y quema la leña del fracaso para calentarte con el éxito. Recuerda que sin la oscuridad la luz no brillaría tanto.

crack81

Hola prueba este codigo
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int vecesRepetidas(int arreglo[10],int valor){
    int cont=0;
    for(int i=0;i<10;i++){
        if(arreglo[i]==valor){
            cont++;
        }
    }
    return cont;
}


int main()
{
    const int tamano=10;
    int arreglo[tamano]={2,3,3,4,2,42,34,1,2,5};
    string expresiones[tamano]={"primer","segundo","tercero","cuarto","quinto","sexto","septimo","octavo","noveno","decimo"};

    for(int i=0;i<tamano;i++){
        cout<<"El "<<expresiones[i]<<" elemento esta repetido "<<vecesRepetidas(arreglo,arreglo[i])<<" veces"<<endl;
    }

    return 0;
}
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

Yoel Alejandro

Bueno, la solución de crack81 me parece excelente, casi no tendría nada que añadir.

Existen otras formas de poder hacerlo, pero serían más complicadas. Sólo por ocio me puse a pensar en lo siguiente, en aras de optimizar un poco la velocidad el código.


  • Repasamos el primer elemento del vector, y lo marcamos una vez.
  • Para el segundo elemento y posteriores, repasamos sólo para los elementos que le anteceden, por ejemplo para el quinto elemento, buscamos para el primero, segundo, tercero y cuarto. Si alguno es igual, aumentamos en uno la cantidad de apariciones tanto para el elemento que estamos revisando como para todos los que son iguales a él.
  • De esta manera, no se realizan 10x10 = 100 búsquedas, sino 1 + 2 + 3 + ... + 9 = 45 búsquedas. Claro que la diferencia en tiempo no la notarás aquí, pero si fuera por ejemplo un vector con 1000 elementos quizá la diferencia fuera significativa.

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

/* escribe en cantidad la cantidad de veces que se repite
* cada elemento respectivo en arreglo, i.e., cantidad[i]
* representa la cantidad de veces que se repite arreglo[i]
* en el vector arreglo[]
*/
void vecesRepetidas(int arreglo[10], int cantidad[10]){
   
    int i, j, count;
   
cantidad[0] = 1; /* primer elemento solo aparece una vez */
for ( i = 1; i < 10; i++ ) {
count = 1;
/* busca hacia atras los elementos del vector, y si encuentra repetidos,
* incrementa en uno la cantidad de cada uno */
for ( j = 0; j < i; j++ )
if ( arreglo[j] == arreglo[i] ) {
if ( count == 1 ) count = cantidad[j] + 1;
cantidad[j] = count;
    }
    cantidad[i] = count;
}
}


int main()
{
    const int tamano=10;
    int arreglo[tamano]={2,3,3,4,2,42,34,1,2,5};
    int cantidad[10];
    string expresiones[tamano]={"primer","segundo","tercero","cuarto","quinto","sexto","septimo","octavo","noveno","decimo"};


    vecesRepetidas( arreglo, cantidad);
   
    for(int i=0; i<tamano; i++){
        cout<<"El elemento: " << arreglo[i] << ", esta repetido: "<<cantidad[i]<<" veces"<<endl;
    }

    return 0;
}


Salida en pantalla:

El elemento: 2, esta repetido: 3 veces
El elemento: 3, esta repetido: 2 veces
El elemento: 3, esta repetido: 2 veces
El elemento: 4, esta repetido: 1 veces
El elemento: 2, esta repetido: 3 veces
El elemento: 42, esta repetido: 1 veces
El elemento: 34, esta repetido: 1 veces
El elemento: 1, esta repetido: 1 veces
El elemento: 2, esta repetido: 3 veces
El elemento: 5, esta repetido: 1 veces


Saludos, Yoel.
P.D.- Sí acepto M.P.
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)