Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: aRaZer en 23 Octubre 2018, 02:36 am



Título: Duda con arrays C++
Publicado por: aRaZer en 23 Octubre 2018, 02:36 am
Hola muy buenas gente, quisiera saber si alguien me podría ayudar con una duda que tengo. Tengo que hacer un programa en el cual se introducirán un total de 31 datos en un arreglo y después el programa tendrá que imprimir el numero de datos que son diferentes al ultimo número ingresado al arreglo; Ejempo: en un arreglo se introducen 8 datos-> 1,1,2,2,3,4,2,1 = entonces en el programa me deberá imprimir el número 5 por qué son 5 números los que son diferentes al ultimo dato del arreglo.

Si alguien me pudiera apoyar diciéndome como es que puedo lograr el conteo de los números que no se repiten el arreglo se lo agradecería bastante, sin mas que decir gracias por su tiempo.


Título: Re: Duda con arrays C++
Publicado por: Beginner Web en 23 Octubre 2018, 02:46 am
Con un contador de numeros diferentes al ultimo;
Haces el recorrido y preguntas en cada vuelta si el numero actual es diferente al ultimo ingresado arreglo[ULTIMAPOSICION] y si es diferente incrementas el valor del contador +1;

Código
  1. int cantidadNumeros(arreglo a)
  2. {
  3. int contador=0;
  4. for(int i=0;i<TAMAÑOARREGLO;i++)
  5. if(a[i]!=a[ULTIMAPOSICION])
  6. contador++;
  7. return contador;
  8. }


Título: Re: Duda con arrays C++
Publicado por: elgilun en 24 Octubre 2018, 09:33 am
La función que necesitas ya existe en la biblioteca estándar, es count_if
https://en.cppreference.com/w/cpp/algorithm/count

Código:
#include <iostream>
#include <vector>
#include <algorithm>

auto diferentes(const std::vector<int>& arreglo, int ultimo)
{
// contar los números distintos a "ultimo"
return std::count_if(arreglo.begin(), arreglo.end(), [&ultimo](auto i) { return i != ultimo; });
}

int main()
{
// ejemplo
// en un arreglo se introducen 8 datos:
std::vector<int> arreglo{1, 1, 2, 2, 3, 4, 2, 1};

std::cout << diferentes(arreglo, 1);

}