Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: estudiante_1 en 18 Enero 2016, 01:16 AM

Título: Contar elementos de un vector
Publicado por: estudiante_1 en 18 Enero 2016, 01:16 AM
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.
Título: Re: Contar elementos de un vector
Publicado por: JavierScars en 18 Enero 2016, 04:34 AM
Si al menos pones algo que lleves... No hacemos tarea... :¬¬
Título: Re: Contar elementos de un vector
Publicado por: crack81 en 18 Enero 2016, 06:23 AM
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;
}
Título: Re: Contar elementos de un vector
Publicado por: Yoel Alejandro en 18 Enero 2016, 15:58 PM
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.


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.