Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Emily en 18 Enero 2022, 10:22 am



Título: tengo una una pequeña duda, sobre vectores
Publicado por: Emily en 18 Enero 2022, 10:22 am
En c tengo un vector de N numero y lo que me gustaría saber es de que manera puedo saber cuales numero se repiten, no cuantas veces se repiten un numero.
por ejemplo
Entrada
25624925
Salida
los números que se repiten son 2, el 2 y 5
No pido que me den el código por que se que no es un foro donde te resuelven tares por solo quiero una pequeña orientación de como poder hacerlo.
se los agradecería mucho si me ayudan.


Título: Re: tengo una una pequeña duda, sobre vectores
Publicado por: MAFUS en 18 Enero 2022, 14:02 pm
¿Es un vector? Dos opciones rápidas:
1. Ordénalo y ya puedes contar las veces que se repiten sin gastar mucha memoria.
2. Un array de 10 booleanos cada uno para un número. El número del vector lo usas cómo índice de tu array e incrementas esa posición. Al terminar recorre el array para ver qué posiciones son mayores de 1.


Título: Re: tengo una una pequeña duda, sobre vectores
Publicado por: K-YreX en 19 Enero 2022, 19:23 pm
Las soluciones de @Mafus son buenas opciones  ;-)

Personalmente, me gusta más la segunda opción pero con un pequeño detalle: cada elemento del array tiene que ser de un único dígito.
Por lo que está opción es más limitada, mientras que la primera funciona con números de cualquier longitud.


Título: Re: tengo una una pequeña duda, sobre vectores
Publicado por: MAFUS en 19 Enero 2022, 21:23 pm
Atendiendo que su entrada es un único número de n dígitos la segunda solución le vale.


Título: Re: tengo una una pequeña duda, sobre vectores
Publicado por: K-YreX en 19 Enero 2022, 22:12 pm
Desde luego. Sólo quería recalcar esa limitación.

Y aprovecho ya para extender un pelín más la explicación y decir que no es que esa solución sólo valga para números de un dígito. Lo correcto es decir que sólo vale para números de un dígito si el array de contadores/booleanos es de longitud = 10.
Como forma general para que funcione con cualquier tamaño de números: La longitud del array debe ser 10 elevado al número máximo de dígitos que pueda tener cualquiera de los elementos.
Código:
longitud_array = pow(10, num_max_digitos)
Lo cual se hace inviable para números con muchos dígitos pero con un par de dígitos seguiría siendo una buena opción.