Autor
|
Tema: [RETO] ¿Fácil? Buscando los números de Lychrel (Leído 13,724 veces)
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Hooola! No sabia si presentar esto como reto o no (?) http://gaussianos.com/la-conjetura-del-196/ http://en.wikipedia.org/wiki/Lychrel_number
Ahi esta, tienen que hacer una funcion booleana que calcule los numeros capicuas a partir de este, con un numero maximo de vueltas, para calcular si es de Lychrel o no Ademas de devolver el numero final dado La firma debe ser asi: Public Function IsLychrelNumber(numero As Double, ByRef numeroFinal As Double,Optional maxVueltas As Long = 20) As Boolean
Si no se logra dar el numero de vueltas en menos de maxVueltas se toma como si fuera numero de Lychrel (aunque el numero este en la vuelta 21 ) NOTA: Cabe aclarar que debe devolver True cuando no se encuentra el numero capicua El tiempo se medira con la clase CTiming ya publicada en retos anteriores... Ahora si! A codear!
|
|
« Última modificación: 18 Agosto 2010, 16:22 pm por raul338 »
|
En línea
|
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Tiene que ser en VB? xD
|
|
|
En línea
|
|
|
|
isseu
Desconectado
Mensajes: 325
°º¤ø,¸¸,El conocimiento es poder°º¤ø,¸¸,ø¤º°`°º¤ø,
|
lo hare más tarde, pero en c++
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Ya lo hice, ahora lo tengo que modificar Dada la manera en que se calcula el número, probando incluso con 89 (es uno de los ejemplos de wikipedia) se desborda, no sirven los long Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Corregido! Puse como double los tipos de datos, asi no hay desbordamientos
|
|
|
En línea
|
|
|
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!!
Que bueno acabo de leer el post de novlucker y me saco las dudas
Gracias!!!
|
|
« Última modificación: 18 Agosto 2010, 17:00 pm por 79137913 »
|
En línea
|
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!" "La peor de las ignorancias es no saber corregirlas"
79137913 *Shadow Scouts Team*
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Function IsLychrelNumber(numero As Double, ByRef numeroFinal As Double, Optional maxVueltas As Long = 20) As Boolean Dim i As Long numeroFinal = numero For i = 0 To maxVueltas numeroFinal = numeroFinal + CDbl(StrReverse(CStr(numeroFinal))) If (numeroFinal = CDbl(StrReverse(CStr(numeroFinal)))) Then Exit Function Next IsLychrelNumber = True End Function
Entendí que numeroFinal era el último generado, así que comienzo con ese, sino lo quito y no lo uso De cualquier manera, esto sigue siendo funcional para números "pequeños", sino hay que hacer la suma mediante strings. Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Optimizando me quedo como la de novlucker!! Se me habia ocurrido comprar solo dando vuelta "despues de la mitad" del numero, pero... era mas lento ._. Aca esta, se podria decir que es practicamente igual a la de novlucker, solo que esta funciona aun para numeros grandes Public Function EsLychrel(ByVal numero As Double, ByRef numeroFinal As Double, Optional maxVueltas As Long = 100) As Boolean Dim i As Long ' FAIL: As Integer xDDDD numeroFinal = Abs(numero) ' No permito numeros negativos If numero = CDbl(StrReverse(numero)) Then Exit Function ' Si el numero ya es capicua, para que me gasto? xD numeroFinal = Val(numero) ' Quito los decimales maxVueltas = Abs(maxVueltas) ' 1 a -10 (sumando 1) es imposible xDDD, quito los negativos For i = 1 To maxVueltas ' Sumo el normal y el numero al revez, poniendo formato numerico comun numeroFinal = numeroFinal + CDbl(StrReverse(FormatNumber(numeroFinal, 0, vbTrue, vbFalse, vbFalse))) ' Comparo si es el mismo :P If FormatNumber(numeroFinal, 0, vbTrue, vbFalse, vbFalse) = StrReverse(FormatNumber(numeroFinal, 0, vbTrue, vbFalse, vbFalse)) Then Exit Function Next EsLychrel = True End Function
EDIT: Hecho en 56957,0293718157 ms, 10 To 100000, maxVueltas = 1000 (con DoEvents entre calculo de cada numero )
|
|
« Última modificación: 18 Agosto 2010, 17:46 pm por raul338 »
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Dudo que tan grandes, la variable numeroFinal tiene un límite y ahí crashea. Además, los códigos funcionan porque tiene el maxVueltas bajo, donde lo agrandes muere [Edito]: El mío crashea con números más chicos xD Saludos
|
|
« Última modificación: 18 Agosto 2010, 17:40 pm por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[RETO+Python] Buscando rangos
« 1 2 »
Scripting
|
Novlucker
|
13
|
8,194
|
31 Enero 2011, 18:30 pm
por Karcrack
|
|
|
Sacar numeros de una ecuacion? reto?
« 1 2 »
Programación Visual Basic
|
Edu
|
12
|
5,354
|
14 Marzo 2011, 16:58 pm
por 79137913
|
|
|
Reto relativamente fácil
« 1 2 »
Desafíos - Wargames
|
ace332
|
15
|
11,365
|
23 Enero 2012, 19:46 pm
por Caster
|
|
|
Reto KeygenMe #2 [Facil]
Ingeniería Inversa
|
jEUDi17
|
7
|
4,687
|
28 Agosto 2012, 23:29 pm
por Flamer
|
|
|
Reto SQLi -1-[fácil]
Desafíos - Wargames
|
elh4ck3r
|
3
|
3,815
|
20 Julio 2018, 22:14 pm
por engel lex
|
|