Python - Ayuda para resolver N numero en series Python / Java

 
Vista:

Ayuda para resolver N numero en series Python / Java

Publicado por Dracco07 (6 intervenciones) el 07/03/2017 16:41:31
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?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda para resolver N numero en series Python / Java

Publicado por Dracco07 (6 intervenciones) el 08/03/2017 15:51:05
Excelente Amigo

Mas o menos es lo que necesito
Aunque una de las condiciones es no repetir numeros
¿Como le hago para que no lo repita?

Yo habia hecho algo asi.. pero para las cadenas de 3, 4 et.c (1+2+3+4+5=15)
no me funciona.. Imagina cuando introduzca el usuario un 350 o algo asi, serian muchas combinaciones
y pues no lo he logrado.. me han dicho que con los Arrays pero no los conozco ni se como se utilizan


1
2
3
4
5
6
7
8
9
10
11
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")

Tambien probe con este otro codigo, pero tengo el mismo problema al avanzar a mas de dos (1+2+3+4+5=15)

1
2
3
4
5
6
7
8
9
10
11
12
print("Dame un numero")
number = int(input())
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)

Si me pudieras ayudar un poco mas.... Recien comienzo con Python

Muchas gracias y saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ayuda para resolver N numero en series Python / Java

Publicado por kip (257 intervenciones) el 09/03/2017 04:09:50
Lo entiendo.... pero con el ejemplo que colocaste arriba es con el que me guie para obtener las particiones, por ejemplo en el codigo que te coloque arriba si intento obtener las particiones del numero 5 obtendria:

1
2
3
4
5
6
5 = 4 + 1
5 = 3 + 2
5 = 3 + 1 + 1
5 = 2 + 2 + 1
5 = 2 + 1 + 1 + 1
5 = 1 + 1 + 1 + 1 + 1

Como seria en tu caso si quieres obtener lo mismo es decir el numero 5? Podrias decirnos que deberia eliminarse de las particiones anteriores?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda para resolver N numero en series Python / Java

Publicado por dracco07 (6 intervenciones) el 09/03/2017 05:14:18
Mira del ejemplo del No. 5
quedaria asi
1
2
3
4
5
6
1 + 4 = 5
2 + 3 = 5
3 + 2 = 5
4 + 1 = 5
 
El numero: 5 tiene 4 series

Si te fijas no repito el mismo numero en la serie como en este otro:
5 = 1 + 1 + 1 + 1 + 1

y no se como hacerle cuando tenga el valor por ejemplo de 20
que las series pueden ser de 2, 3, 4,5 digitos.
por ejemplo:

20 = 2+3+7+8
20= 1+2+3+4+10
20= 1+2+17
20= 2+3+5+10
etc..

Es algo asi como las probabilidades de estadisticas
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ayuda para resolver N numero en series Python / Java

Publicado por kip (257 intervenciones) el 09/03/2017 06:02:07
Ahora lo tengo mas claro, lo que sucede es que en el codigo que coloque mas arriba lo que yo hago es evitar mostrar por ejemplo series (particiones) del numero que sean parecidas algo asi:

1
2
5 =  1 + 1 + 3
5 = 3 + 1 + 1

Ambas son lo mismo pero en diferente orden, entonces lo que deseas hacer no es posible ya que no mantiene todas las posibles combinaciones, por ello he modificado la clase y le he añadido una funcion mas para generar las particiones o series que no contengan numeros repetidos, aqui la clase:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class NParticiones:
 
    particiones = []
    fparticiones = []
 
    def __init__(self, num):
        self.num = num
        self.__order_particiones()
 
    def print_particiones(self):
        string_particiones = ''
        for serie in self.particiones:
            string_particiones += str(self.num) + ' = ' + ' + '.join([str(num) for num in serie]) + '\n'
        print (string_particiones)
 
    def print_fparticiones(self):
        string_particiones = ''
        for serie in self.fparticiones:
            string_particiones += str(self.num) + ' = ' + ' + '.join([str(num) for num in serie]) + '\n'
        print (string_particiones)
 
    def __order_particiones(self):
        order_particiones = []
        f_order_particiones = []
        for serie in self.__gen_particiones(self.num):
            order_particiones.append(serie)
        self.particiones = sorted(order_particiones)
        for serie in self.__filter_particiones():
            f_order_particiones.append(serie)
        self.fparticiones = sorted(f_order_particiones)
 
    def __filter_particiones(self):
        ret = False
        for serie in self.particiones:
            if len(serie) == len(set(serie)):
                yield serie
 
    def __gen_particiones(self, num):
        if num == 1:
            yield [1]
        elif num < 1:
            yield []
        else:
            for x in range(num, 0, -1):
                if self.num == x: continue
                for i in self.__gen_particiones(num - x):
                    i.append(x)
                    yield i

Es igual que el codigo de arriba solamente modifique para que me genere todas las combinaciones y ahora ademas una funcion que traiga las series sin numeros repetidos, ejemplo:

1
particiones = NParticiones(5) # Vamos de nuevo con el 5

Una vez instanciado la clase enviandole como parametro el numero, llamamos al metodo .print_fparticiones(), este mostrara lo siguiente:

1
particiones.print_fparticiones()

1
2
3
4
5 = 1 + 4
5 = 2 + 3
5 = 3 + 2
5 = 4 + 1

Si quieres mostrar cuantas series tiene puedes usar len() enviandole como parametro la propiedad de la clase de las particiones filtradas asi:

1
2
nseries = len(particiones.fparticiones)
print ("El numero %d tiene %d series" % (5, nseries))

1
El numero 5 tiene 4 series

Prueba el codigo y dime si se ajusta ahora a lo que pides, por cierto tambien puedes obtener las series sin aquel filtro de numeros repetidos, la funcion .print_particiones() te mostrara aquellas series sin filtro....

Nos cuentas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Ayuda para resolver N numero en series Python / Java

Publicado por Dracco07 (6 intervenciones) el 09/03/2017 15:47:53


Woooow. Incleible... Es justo lo que necesito, ya lo probe con varios numeros y funciona perfectamente


Muchisimas Gracias kip... Quedo de lujo

Ahora me toca revisarlo varias veces y entender esta estructura

porque a lo que esta tratando de entender utiliza las llamadas posiciones o cadenas [ ]
con estas variables "particiones = [ ], fparticiones = [ ]" que creo es donde guardamos los datos para despues estraerlos

Estas funciones son las que no me quedaron claras,
"append" es para agregar dentro de las cadenas?
"sorted" esto no se bien que hace al igual que "yield"


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def __order_particiones(self):
        order_particiones = []
        f_order_particiones = []
        for serie in self.__gen_particiones(self.num):
            order_particiones.append(serie)
        self.particiones = sorted(order_particiones)
        for serie in self.__filter_particiones():
            f_order_particiones.append(serie)
        self.fparticiones = sorted(f_order_particiones)
 
    def __filter_particiones(self):
        ret = False
        for serie in self.particiones:
            if len(serie) == len(set(serie)):
                yield serie



Muchisimas Gracias por este incleible Ayuda... Problema Resuelto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar