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
