ayuda con este simple codigo
necesito saber que numeros no repetidos del 1 al 19 satisfacen las condicioenes del if...
el problema se tarda muchoooooooooo
como puedo optimizarlo...esta escrito en qbasic pero con instrucciones facilmente trasportables al vb
FOR a = 1 TO 19
FOR b = a TO 19
FOR c = b TO 19
FOR d = c TO 19
FOR e = d TO 19
FOR f = e TO 19
FOR g = f TO 19
FOR h = g TO 19
FOR i = h TO 19
FOR j = i TO 19
FOR k = j TO 19
FOR l = k TO 19
FOR m = l TO 19
FOR n = m TO 19
FOR o = n TO 19
FOR p = o TO 19
FOR q = p TO 19
FOR r = q TO 19
FOR s = r TO 19
PRINT a; b; c; d; e; f; g; h; i; j; k; l; m; n; l; o; p; q; r; s; "*"
IF (a + b + c = 38) AND (d + e + f + g = 38) AND (h + i + j + k + l = 38) AND (m + n + o + p = 38) AND (q + r + s = 38) AND (n + d + a = 38) AND (m + i + e + b = 38) AND (q + n + j + f + c = 38) AND (r + o + k + g = 38) AND (s + p + l = 38) AND (c + g + l = 38) AND (b + f + k + p = 38) AND (a + e + j + o + s = 38) AND (d + i + n + r = 38) AND (h + m + q = 38) THEN 200
NEXT s
NEXT r
NEXT q
NEXT p
NEXT o
NEXT n
NEXT m
NEXT l
NEXT k
NEXT j
NEXT i
NEXT h
NEXT g
NEXT f
NEXT e
NEXT d
NEXT c
NEXT b
NEXT a
200 PRINT "--"; a; "-"; b; "-"; c; "-"; d; "-"; e; "-"; f; "-"; g; "-"; h; "-"; i; "-"; j; "-"; k; "-"; l; "-"; m; "-"; n; "-"; l; "-"; o; "-"; p; "-"; q; "-"; r; "-"; s;
el problema se tarda muchoooooooooo
como puedo optimizarlo...esta escrito en qbasic pero con instrucciones facilmente trasportables al vb
FOR a = 1 TO 19
FOR b = a TO 19
FOR c = b TO 19
FOR d = c TO 19
FOR e = d TO 19
FOR f = e TO 19
FOR g = f TO 19
FOR h = g TO 19
FOR i = h TO 19
FOR j = i TO 19
FOR k = j TO 19
FOR l = k TO 19
FOR m = l TO 19
FOR n = m TO 19
FOR o = n TO 19
FOR p = o TO 19
FOR q = p TO 19
FOR r = q TO 19
FOR s = r TO 19
PRINT a; b; c; d; e; f; g; h; i; j; k; l; m; n; l; o; p; q; r; s; "*"
IF (a + b + c = 38) AND (d + e + f + g = 38) AND (h + i + j + k + l = 38) AND (m + n + o + p = 38) AND (q + r + s = 38) AND (n + d + a = 38) AND (m + i + e + b = 38) AND (q + n + j + f + c = 38) AND (r + o + k + g = 38) AND (s + p + l = 38) AND (c + g + l = 38) AND (b + f + k + p = 38) AND (a + e + j + o + s = 38) AND (d + i + n + r = 38) AND (h + m + q = 38) THEN 200
NEXT s
NEXT r
NEXT q
NEXT p
NEXT o
NEXT n
NEXT m
NEXT l
NEXT k
NEXT j
NEXT i
NEXT h
NEXT g
NEXT f
NEXT e
NEXT d
NEXT c
NEXT b
NEXT a
200 PRINT "--"; a; "-"; b; "-"; c; "-"; d; "-"; e; "-"; f; "-"; g; "-"; h; "-"; i; "-"; j; "-"; k; "-"; l; "-"; m; "-"; n; "-"; l; "-"; o; "-"; p; "-"; q; "-"; r; "-"; s;
Ahora que tengo en cuenta lo de las repeticiones, yo dirÃa que el algoritmo no es correcto.
comienza asÃ:
FOR a = 1 TO 19
FOR b = a TO 19
FOR c = b TO 19
si no puede haber repeticiones, el segundo bucle deberÃa comenzar por a+1, no?
pero el tema no acaba ahÃ, porqué ha de ser SIEMPRE B>=A, C>=B, etc etc ?
Bueno, que estoy buscando una solución "informática" y si la encuentro la expongo.
Pasando a la respuesta de enço: no se trata de combinaciones, sino de permutaciones. El número de permutaciones serÃa 19! = 121.645.100.408.832.000
Saludos.
comienza asÃ:
FOR a = 1 TO 19
FOR b = a TO 19
FOR c = b TO 19
si no puede haber repeticiones, el segundo bucle deberÃa comenzar por a+1, no?
pero el tema no acaba ahÃ, porqué ha de ser SIEMPRE B>=A, C>=B, etc etc ?
Bueno, que estoy buscando una solución "informática" y si la encuentro la expongo.
Pasando a la respuesta de enço: no se trata de combinaciones, sino de permutaciones. El número de permutaciones serÃa 19! = 121.645.100.408.832.000
Saludos.
pues me sabe mal no estar de acuerdo contigo amigo Baltasar, porque la permutación es un caso especial de las variaciones en las que el conjunto de elementos m es igual al orden n.
en la permutación la variable 'a' serÃa menor o igual a 'b', que no se dará en el For.
en la permutación la variable 'a' serÃa menor o igual a 'b', que no se dará en el For.
Y estamos de acuerdo: son 19 elementos tomados en grupos de 19 sin repetir: PERMUTACIONES sin repetición.
Por lo que puedo ver ese código ha de comprobar 19^19 números, sabes lo que eso puede tardar en ejecutarse?
el total de números a generar para luego comprobar es de 1.978.419.655.660.313.589.123.979 Ãmaginando (que ya es mucho imaginar) que consigues comprobar un millón de números por segundo tardarÃas 1.978.419.655.660.313.589 segundos, que son aprox. 549.561.015.461.198 horas, o 22.898.375.644.216 dÃas, y expresado en años: 62.735.275.737 años.
Me parece que lo ideal es explicar lo que quieres hacer y buscar otro método.
;-)
Saludos
el total de números a generar para luego comprobar es de 1.978.419.655.660.313.589.123.979 Ãmaginando (que ya es mucho imaginar) que consigues comprobar un millón de números por segundo tardarÃas 1.978.419.655.660.313.589 segundos, que son aprox. 549.561.015.461.198 horas, o 22.898.375.644.216 dÃas, y expresado en años: 62.735.275.737 años.
Me parece que lo ideal es explicar lo que quieres hacer y buscar otro método.
;-)
Saludos
Despuéd de revisar un poco lo que habÃas escrito, veo que todo el problema se resuelve de otra manera menos "informática".
Se trata de un problema de lógica, te dan una serie de ecuaciones y has de buscarles solución.
Yo he comenzado un poco, pero no estoy como para resolverlo ahora mismo, aunque te doy algunas pistas:
por un lado tienes:
a + b + c = 38
luego . . . a=38-b-c
por otro:
n + d + a = 38
luego . . . a=38-n-d
con lo cual:
b+c=n+d creo que eso está bien claro, no?
pues a partir de aquÃ, sigue adelante.
Saludos
Se trata de un problema de lógica, te dan una serie de ecuaciones y has de buscarles solución.
Yo he comenzado un poco, pero no estoy como para resolverlo ahora mismo, aunque te doy algunas pistas:
por un lado tienes:
a + b + c = 38
luego . . . a=38-b-c
por otro:
n + d + a = 38
luego . . . a=38-n-d
con lo cual:
b+c=n+d creo que eso está bien claro, no?
pues a partir de aquÃ, sigue adelante.
Saludos
