Ejercicio Bucle While en Python

Iniciado por mgkelly, 11 Mayo 2017, 13:45 PM

0 Miembros y 1 Visitante están viendo este tema.

mgkelly

Hola,
He intentado de mil maneras hacer este ejercicio en Python y no he sido capaz, todas me da error, viene para hacer con bucles while...
Dejo el enunciado por si alguno tiene idea, graciass :D:

"Dados dos números enteros n (n≥0) y a (a>0) encontrar, si existe, el
menor entero x del intervalo [0, n] para el que se cumpla lo siguiente: la diferencia
entre las sumas de los valores enteros de los intervalos [n-x, n] y [0, x] coincide
con a."

He intentado hacer algo así, pero no doy con la solucion:

Código (python) [Seleccionar]
n=int(raw_input("introduce n: "))
a=int(raw_input("introduce a: "))
x=0
sumaintx=0
sumaintn=0


for x in range(0,n):
   sumaintx=0
   sumaintn=0
   while(sumaintn-sumaintx!=a):
     for i in range(n-x,n):
         sumaintn=sumaintn+i
         for j in range(0,x):
             sumaintx=sumaintx+j
   if(sumaintn-sumaintx==a):
       print x

Serapis

#1
Pués a mi me sale... lo complicado es entender correctamente el enunciado.

He puesto como valor para n = 100000 y para a= 350 y la respuesta me da 449.
Probaré con más valores para a...
' a = 350 ' 449
' a = 65  ' 449
' a = 165 ' 446
' a = 43  ' un primo a ver que pasa 449
a = 255 ' 447

- Posiblemente tu valor para n sea tan bajo, que a no tenga oportunidad de encontrarse en ese rango...

- Bueno mirando de nuevo tu código, lo que veo es que fuerzas el while, dentro del primer bucle For, por lo que es incapaz de regresar allí e incrementar x, que siempre valdrá 0. (NOTA: Esto sin embargo, no inutiliza mi comentario previo, sobre un límite demasiado bajo de n).

Reescríbelo así:
Código (python) [Seleccionar]
    n=int(raw_input("introduce n: "))
    a=int(raw_input("introduce a: "))
    x=0
    sumaintx=0
    sumaintn=0
     
    x=-1
    while(x<n):
        x= (x +1)
        sumaintx=0
        sumaintn=0
        #while(sumaintn-sumaintx!=a):
          i= n-x
          for i in range(n-x,n):
              sumaintn=sumaintn+i
              for j in range(0,x):
                  sumaintx=sumaintx+j
        if(sumaintn-sumaintx==a):
            print x

engel lex

viendo matemáticamente esto no tiene muchos ciclos

Citarla diferencia
entre las sumas de los valores enteros de los intervalos [n-x, n] y [0, x]

esto es equivalente a (n-x)*x+(n-x) (si sacas algunas cuentas verás que es esto)

solo resuelve la ecuación donde eso iguale a a y olvidate del ciclo XD

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.