Buenas tardes requiero generar un pequeño programa que combine 6 números del 1 al 40 sin repetición y que sumados den como resultado 125, necesito que muestre todas las posibilidades existentes para llegar a ese resultado, también sin repetición.
¿Alguien puede ayudarme?
que has logrado hasta ahorita?
Sólo combinación de números,6 números del 1 al 40 pero necesito que sumados den como resultado 125, necesito que muestre todas las combinaciones para llegar a ese resultado, también sin repetición.
Lo primero que se me ocurre es elgo como:
for i = 1 to 35
for j = i+1 to 36
for k = j+1 to 37
for l = k+1 to 38
for m = l+1 to 39
for n = m+1 to 40
if i+j+k+l+m+n = 125 then
print i & " + " & j & " + " & k & " + " & l & " + " & m & " + " & n & " = 125"
PD: En pseudo-vb-codigo (:))
El código me genera error.
Pasado a vb6 funciona bien
@MCKSys Argentina 56363 coincidencias ;-)
Cita de: yolanda10 en 24 Septiembre 2013, 02:26 AM
El código me genera error.
Claro que te generará error. Como puse, está en PSEUDO-CODIGO-VB (no se enojen, es lo único que se me ocurre para bautizar el algoritmo expuesto de esa forma).
Es la
idea de lo que puedes hacer. Ahora debes armarte un código que haga lo que dice el algoritmo... :P
Saludos!
Cita de: Danyfirex en 24 Septiembre 2013, 02:44 AM
Pasado a vb6 funciona bien
@MCKSys Argentina 56363 coincidencias ;-)
:o No pensaba que iban a ser tantas!
Cita de: MCKSys Argentina en 24 Septiembre 2013, 03:58 AM
Claro que te generará error. Como puse, está en PSEUDO-CODIGO-VB (no se enojen, es lo único que se me ocurre para bautizar el algoritmo expuesto de esa forma).
Es la idea de lo que puedes hacer. Ahora debes armarte un código que haga lo que dice el algoritmo... :P
Saludos!
:o No pensaba que iban a ser tantas!
ups :xD me equivoque son
56364 coincidencias. :laugh:
Yo tampoco pensé que serian tantas :S.
saludos
for i = 1 - 40
j 1 - 40
k 1 - 40
l 1- 40
m 1- 40
n 1 -40
suma =i+j+k+l+m+n
if suma = 125 then
if i!=j!=k!=l!=m!=n then
print ijklmn
tarda un poco mas porq suma todos los nros con todos, pero soluciona el problema ( me parece )
No se me ocurre como hacer el código para que cumpla con lo solicitado en el algoritmo, me pueden ayudar con el código
No se te tiene que ocurrir nada, AHI LO TIENES!, ajjaja
Cita de: yolanda10 en 24 Septiembre 2013, 21:24 PM
No se me ocurre como hacer el código para que cumpla con lo solicitado en el algoritmo, me pueden ayudar con el código
Bueno, yo sigo la regla del foro: no se hacen tareas. Por esto no te daré el codigo para que copies y pegues.
Necesitas hacerlo por ti mismo/a, sino NUNCA aprenderas.
Algunos tips:
Debes declarar las variables usadas y cerrar los for's.
Los resultados correctos (lo que cumplen el requisito) saldran en la ventana de debug (inmediato) si reemplazas el print por debug.print.
Podrias colocar todo el codigo en el evento click de un boton (por dar un ejemplo).
Saludos!
Yo pude resolverlo en Python (cambie las características del programa) solo que, hay algunos errores que no logro imaginar la solución.
n=0;
for a in range(0,6):
for b in range(0,6):
for c in range(0,6):
if (a!=b!=c):
if ((a+b+c)==2):
print(a,b,c);
n+=1
print ("Se han encontrado:",n,"maneras posibles de encontrar la suma")
Este solo calcula A+B+C = 2
Pero en si el programa arroja:
0 2 0
1 0 1
Se han encontrado 2 maneras posibles de encontrar la suma
cuando en realidad existen mas maneras por ejemplo:
1,1,0
2,0,0
0,0,2; etc.
¿Tendré que mover los fors para que cada uno tenga su orden de principio a fin?
Saludos!
Edito: Creo que viéndolo bien, tengo mal el concepto inicial.
Gracias, pero estas considerando el 0 y el rango es del 1 al 40. Agradecería si me ayudas con el código para que cumpla con lo solicitado en el algoritmo
Yo lo he realizado en Java, aunque tendrías que ver si te vale que se repitan los números en diferente orden.
package PackPrimerDia;
public class PrimerDia {
public static void main (String[] args){
int x = 0;
for (int c_1=1;c_1<=36;c_1++){
for (int c_2=1;c_2<=37;c_2++){
for (int c_3=1;c_3<=38;c_3++){
for (int c_4=1;c_4<=39;c_4++){
for (int c_5=1;c_5<=40;c_5++){
if (c_1+c_2+c_3+c_4+c_5 == 125){
x++;
System.out.println("Combinacion Nº: "+x +" "+c_1+" "+c_2+" " +c_3+" " +c_4+" " +c_5);
}
}
}
}
}
}
}
}
Gracias por tu aporte lo he probado pero genera repetición aunque en diferente orden, aumenta mucho el número de la lista
La otra forma que es la que no me gustaría tener que hacerla, es la de guardar en un array bidimensional de a saber cuantas filas y 6columnas, cada una de las lineas generadas se comprueba primero que no se encuentren en el array y una vez comprobado que no se encuentra la guardo como válida,sim embargo no me gusta porque me parece fatal optimizado el algoritmo, tardará 4 veces mas en generarlo, aunque si que no se repetiría ningún nº.
En python:
def main():
cuenta=0
for i in range(1,36):
for j in range(i+1,37):
for k in range(j+1 , 38):
for l in range(k+1 , 39):
for m in range(l+1 , 40):
for n in range(m+1 , 41):
if i+j+k+l+m+n == 125:
print str(i) + " + " + str(j) + " + " + str(k) + " + " + str(l) + " + " + str(m) + " + " + str(n) + " = 125"
cuenta += 1
print 'Total: %s' %cuenta
if __name__ == '__main__':
main()
Imprime un total de 56363 combinaciones posibles.
Saludos!
PD: Segun el enunciado, los que no deben repetirse son los 6 números de la suma.
Las combinaciones posibles pueden repetir los números en diferentes posiciones, siempre y cuando no repitan números en la misma suma.
Joooder si se me permite la expresión, acabo de ver tu código y me parece increible, y ¿ dices que es lo primero que se te ocurre a bote pronto ? XD, que bueno.
Aplica el concepto de divide y vencerás... es posible que se agilice...
Dulces Lunas!¡.
Gracias por las respuestas me han servido mucho y particularmente me facilito mucho hacerlo en java.
Una pregunta, los resultados no deben tener números iguales entre sí? o cada secuencia por separada?