Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Ayuda para resolver N numero en series Python / Java
#1
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? Big Grin
Responder
#2
Hola, bienvenido. Probablemente la cantidad de soluciones para este mismo problema sea muy grande, aquí tienes la mía:

  1. number = 15
  2. approaches = []
  3.  
  4. for a in range(1, number + 1):
  5.    b = number - a
  6.    if b < a:
  7.        break
  8.    approaches.append("{} + {}".format(a, b))
  9.  
  10. print(len(approaches))  # Cantidad de soluciones.
  11. 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.
Responder
#3
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
Responder
#4
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:

  1. >>> def partition(number):
  2. ...     answer = set()
  3. ...     answer.add((number, ))
  4. ...     for x in range(1, number):
  5. ...         for y in partition(number - x):
  6. ...             answer.add(tuple(sorted((x, ) + y)))
  7. ...     return answer
  8. ...
  9. >>> partition(4)
  10. 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.
Responder
#5
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
Responder
#6
Perfecto, lamentablemente no puedo ayudarte en Java, pero cualquier otra duda aquí estaremos.

Un saludo.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)