• Reto de promacion[ NIVEL BASICO]

 #491051  por crack81
 04 Mar 2017, 19:44
Con el motivo de que mas usuarios se animen aportar me incluyo, he decidido empezar una serie de retos de programacion prinicipalmente basico y de nivel intermedio para que la comunidad pueda publicar sus implementacion no importando el lenguaje. Bueno menos charla empezemos con el problema:


Problema:
Aunque el problema es muy simple les dejo la solucion, ojo para los nuevos no se engañen viendo antes la solucion
Saludos... :drinking:
 #491053  por davinciomar
 04 Mar 2017, 20:41
no entendi bien tenemos que introducir un rango y sacar tdos los numeros impares y mostrar el resultado de su suma?
porque pones en input:
2
1
5
3
3
output:
case 1: 9
case 2: 8

¿? No era solamente sacar el rango de 1-5? Ya que los pares no cuentas si me puedes aclaras el ejercicio un poco merci mi logica no es muy buena.
 #491055  por crack81
 04 Mar 2017, 21:43
Claro que si, mira el primer 2 indica la cantidad de entradas que en el caso de ejemplo son 2

entrada 1:
1
5

en la primera entrada tenemos los numeros del 1 al 5 si vemos todo los numeros impares entre esos dos digitos nos daria
1 3 5 y si los sumamos nos daria como resultado 1+3+5= 9

entrada 2:
3
5
en la segunda entrada tenemos los numeros del 3 al 5 hacemos lo mismo que en la entrada uno
3 + 5 = 8


Saludos....
 #491069  por SadFud
 05 Mar 2017, 18:44
Mi solucion:
 #491071  por crack81
 05 Mar 2017, 20:50
@Sadfud excelente aunque haya estado bien que hayas metido tu codigo entre etiquetas de spoiler para que los nuevos no vieran el codigo, publique otro problemilla espero te animes con ese tambien.
Saludos.... :drinking:
 #491088  por Scorpio
 07 Mar 2017, 14:48
Un poco tarde pero aquí tienes la mia en AutoIt. :drinking:
//Regards.
 #491106  por albertobsd
 08 Mar 2017, 19:46
Aun que el programa tiene pinta de basico, No se dejen engañar, Si les piden el pero de los casos
T = 100 y de A = 0 hasta B = 100 (100 veces) y lo hacen de forma Iterativa Desde A hasta B, su programa se ejecutara en un ciclo de almenos 10000 Operaciones.

Busquen la forma matematica para encontar la suma de los impares en un rango dado y el programa sera mas eficiente.

Saludos!
 #491107  por albertobsd
 08 Mar 2017, 21:01
Dejo mi codigo, como les comente, no es necesario iterar entre todos los los numeros de A hasta B, basta con la formula, incluso creo que se podria reducir mas, pero eso ya se los dejo a su consideracion.
 #491111  por Scorpio
 09 Mar 2017, 00:41
[ Debe registrarse para ver este enlace ] escribió: [ Debe registrarse para ver este enlace ]08 Mar 2017, 19:46 Aun que el programa tiene pinta de basico, No se dejen engañar, Si les piden el pero de los casos
T = 100 y de A = 0 hasta B = 100 (100 veces) y lo hacen de forma Iterativa Desde A hasta B, su programa se ejecutara en un ciclo de almenos 10000 Operaciones.

Busquen la forma matematica para encontar la suma de los impares en un rango dado y el programa sera mas eficiente.

Saludos!
No se a que te refieres pero aqui una optimizacion del mio con 50 iteracciones con un rango de 0 - 100.
_Problemita Iteracciones: 101
_Problemita Result: 2500
_Problemita2 Iteracciones: 50
_Problemita2 Result: 2500
//Regards.
 #491116  por davinciomar
 09 Mar 2017, 01:57
Aqui lo que intente sin iterar 10000 veces:


Se refiere a que si tienes 100 entradas y iteras 100 veces el programa tendrá que realizar 10.000 iteraciones por lo que creo que sería menos eficiente. Por lo que se podría calcular directamente con una formula sin necesidad de iterar. Pero por cierto sabiendo el numero de impares de un impar impar, par par, impar par se podría calcular pero el calcula con la formula sin necesidad de saberel numero de impares.
 #491117  por crack81
 09 Mar 2017, 06:13
@davinciomar Muy interesante preguntas has planteado aunque en el algoritmo no se especifica tiempo, la mayoria de las implementaciones tiene una complejidad O(n) y en los mejores caos O(n/2) que es relativamente buena claro que se puede mejorar como dices por ello me decidi a codificar otro algoritmo que remplace los bucles por simples formulas matematicas que en performance se gana mucho.

Este algortimo se acerca al santo grial del O(1) pero claro se puede pulir mas intente no simplificar demasidado las formulas para que se entiendan pero claro puede quedar mas corto.
 #491134  por albertobsd
 10 Mar 2017, 17:08
Scorpio escribió: No se a que te refieres pero aqui una optimizacion del mio con 50 iteracciones con un rango de 0 - 100.
//Regards.
Presisamente me refiero a que no es necesario Iterar ni las 50 veces que tu iteras para el caso de 0 a 100, basta con unas cuantas sumas restas multiplicaciones y divisiones para obtener el resultado.

Dejo mi codigo:
 #491138  por crack81
 10 Mar 2017, 19:01
Excelente @albertobsd muy buena implementacion, tuve un detalle co los saltos de linea que le colocaste al momento de leer el numero ya que no trabajaba de manera esperada se los quite y anduvo bien.
Saludos...