Mensajes: 5
Temas: 2
Registro en: Mar 2017
Reputación:
0
Buen dia a todos
Espero me puedan ayudar con un ejercicio que me a dejado mi procesor de la Universidad
El problema consiste en desarrollar un programa en python que saque las series posibles
de un numero dado por el usuario..
Ejemplo:
No. 15
1+14 = 15, 2+13=15, etc.
1+2+12=15, 2+2+11=15, etc.
1+2+3+9=15, 3+4+8 = 15, etc.
1+2+3+4+5=15, etc
No bede de repetir ningun numero // Condicion
El programa me debe de dar las series posibles y contar cuantas son..
Lo he intentado con Ciclos, While y For, anidados
pero solo llego hasta el 3er digito y ya es mucho codigo desarrollado
Realmente estoy perdido no se que inventigar para realizarlo
No se si por clases, Matrices... T_T No tengo idea de como realizarlo..
Necesito un Genio....alguno por ahi?
Mensajes: 1.298
Temas: 3
Registro en: Feb 2016
Reputación:
71
Hola, bienvenido. Probablemente la cantidad de soluciones para este mismo problema sea muy grande, aquí tienes la mía:
Código: number = 15
approaches = []
for a in range(1, number + 1):
b = number - a
if b < a:
break
approaches.append("{} + {}".format(a, b))
print(len(approaches)) # Cantidad de soluciones.
print(approaches)
El resultado para el número 15 es:
Cita:7
['1 + 14', '2 + 13', '3 + 12', '4 + 11', '5 + 10', '6 + 9', '7 + 8']
El método es sencillo: a y b representan los sumandos. Realizamos un bucle donde a recorre desde 1 hasta n (15 en este caso), y b siempre es el número necesario para llegar al límite ( n). La condición b < a garantiza que no se repitan las operaciones.
Espero que te sirva.
Un saludo.
Mensajes: 5
Temas: 2
Registro en: Mar 2017
Reputación:
0
Hola me resulto Genial este metodo
pero como le haria para que no solo funcione con 2 digitos
Yo habia hecho esto de 2 digitos 1+14 = 15, pero me atoro al pasar 1+2+12=15
n,x,i,s = 0,0,0,0
print("Dame un Numero")
n=int(input())
if n>1:
x=n
while i!=n:
i=i+1
x=x-1
s=s+1
print(i,"+",x,"=",i+x)
print("El numero:",n,"tiene",s,"series")
Con este Resultado:
Dame un Numero
15
1 + 14 = 15
2 + 13 = 15
3 + 12 = 15
4 + 11 = 15
5 + 10 = 15
6 + 9 = 15
7 + 8 = 15
8 + 7 = 15
9 + 6 = 15
10 + 5 = 15
11 + 4 = 15
12 + 3 = 15
13 + 2 = 15
14 + 1 = 15
15 + 0 = 15
El numero: 15 tiene 15 series
Pero aun no puedo hacerlo con todas las combinaciones posibles
///Hacer un D-F/Programa que lea un numero y de las series consecutivas
///ademas diga cuantas series tiene Ejemplo: 15 5+4+3+2+1=15, 7+8=15
Si me ayudaras un poco mas a entender como modificarlo para encontrar todas las combinaciones posibles. te lo agradeceria mucho
me han dicho que con los Arrays, pero la verdad es que no se ni como usarlas
Muchas gracias de antemano Francisco
Saludos
Mensajes: 1.298
Temas: 3
Registro en: Feb 2016
Reputación:
71
Bien, en ese caso, deberías usar lo que en matemática se llama Partición ( Wikipedia). Se trata de un algoritmo para encontrar todas las representaciones de un número entero como la suma de otros números enteros menores. Por ejemplo, como se muestra en el artículo:
4 = 3 + 1 = 2 + 2 = 2 + 1 + 1 = 1 + 1 + 1 + 1
En este enlace tienes una solución:
Código: >>> def partition(number):
... answer = set()
... answer.add((number, ))
... for x in range(1, number):
... for y in partition(number - x):
... answer.add(tuple(sorted((x, ) + y)))
... return answer
...
>>> partition(4)
set([(1, 3), (2, 2), (1, 1, 2), (1, 1, 1, 1), (4,)])
Considerando que este código funciona con listas y no con iterables, puede resultar bastante pesado para grandes números. Si esto es un problema para tí, puedes encontrar otros algoritmos más optimizados en la web con el nombre de "Partición" o "Partition" en inglés.
Saludos.
Mensajes: 5
Temas: 2
Registro en: Mar 2017
Reputación:
0
Muchas Gracias Francisco
Me a resultado bien ese codigo
Ahora ya solo me toca hacerlo mismo en java...
y gracias al metodo de particiones pues ya tengo una idea de como hacerlo
por que realmente esta muy perdido de como realizar este problema..
Saludos
Mensajes: 1.298
Temas: 3
Registro en: Feb 2016
Reputación:
71
Perfecto, lamentablemente no puedo ayudarte en Java, pero cualquier otra duda aquí estaremos.
Un saludo.
|