Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cimli1996 en 27 Febrero 2023, 08:51 am



Título: AYUDA CON UN CODIGO
Publicado por: cimli1996 en 27 Febrero 2023, 08:51 am
Holaa! soy nueva en este foro y tambien programando, necesito ayuda con un codigo, en realidad es nada mas una parte de el porque lo demas ya lo pude hacer. Seria lo siguiente, que al ingresar numeros a partir del 0 el programa me devuelva el tercer valor mas bajo, por ejemplo: si las entradas son 4, 5, 8, 17, 24, 23, 1, el primer valor mas bajo seria el 1, luego el segundo el 4 y por ultimo y tercero el 5 el cual necesito imprimir. Sugerencias ? O si me podrian guiar como hacerlo estaria muy agradecida  :)


Título: Re: AYUDA CON UN CODIGO
Publicado por: MCKSys Argentina en 27 Febrero 2023, 09:01 am
Hola!

Necesitas mostrar tus avances y hacer preguntas específicas, para que podamos ayudarte.

Saludos!


Título: Re: AYUDA CON UN CODIGO
Publicado por: Serapis en 28 Febrero 2023, 18:12 pm
Siempre debes poner código donde tienes problemas, sea por un error o porque tienes dudas sobre como resolverlo o lo resuelves pero quieres ver si es posible hacerlo más eficiente...

Cuando la lista es grande y será consultado muchas veces, lo más rentable es ordenar la lista, array, ...luego el acceso al tercero, décimo primero, etc... tarda nada.

Si la lista es muy pequeña y siempre vas a necesitar buscar el tercero... lo más evidente (pero no lo más óptimo), es recorrer la lista 3 veces:
1 - buscas el menor de la lista: si elemento(x) es menor que minActual; minActual = elemento(x)
   Al término de ese bucle: hallazgo =minActual
2 - buscar de nuevo el menor de la lista, pero ahora se exige que además deba ser mayor que hallazgo.
   Si hay valores repetidos, el código hay que retocarlo.
3 - Igual que el punto 2... de hecho, tras el primer paso, el paso 2 y 3 pueden ser un bucle para buscar el enésimo.

Cuando la lista es muy grande, todavía es más rápido recorrerla 3 veces, que ordenarla, pero ... puede resolverse en sólo 1 recorrido.
A - Creas un array de 3 elementos, inicialmente les estableces el mayor valor posible que pueda tener la lista (esto es, según el tipo de datos)
B - Se empieza a buscar en un bucle:
    si elemento(x) es menor que minActual;
        minActual = elemento(x)
        TresMin(0) = TresMin(1)
        TresMin(1) = TresMin(2)
         TresMin(2) = minActual
    Fin si
    Devolver TresMin(0)
Fin función