ayuda con este simple codigo

ciclope
22 de Febrero del 2004
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;







Baltasar
22 de Febrero del 2004
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.

en?
22 de Febrero del 2004
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.


Baltasar
22 de Febrero del 2004
Y estamos de acuerdo: son 19 elementos tomados en grupos de 19 sin repetir: PERMUTACIONES sin repetición.

en?
22 de Febrero del 2004
sí, completamente de acuerdo 19! ; - )

Baltasar
22 de Febrero del 2004
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

Baltasar
22 de Febrero del 2004
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