Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: mgkelly en 11 Mayo 2017, 13:45 pm



Título: Ejercicio Bucle While en Python
Publicado por: mgkelly en 11 Mayo 2017, 13:45 pm
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
  1. n=int(raw_input("introduce n: "))
  2. a=int(raw_input("introduce a: "))
  3. x=0
  4. sumaintx=0
  5. sumaintn=0
  6.  
  7.  
  8. for x in range(0,n):
  9.    sumaintx=0
  10.    sumaintn=0
  11.    while(sumaintn-sumaintx!=a):
  12.      for i in range(n-x,n):
  13.          sumaintn=sumaintn+i
  14.          for j in range(0,x):
  15.              sumaintx=sumaintx+j
  16.    if(sumaintn-sumaintx==a):
  17.        print x


Título: Re: Ejercicio Bucle While en Python
Publicado por: Serapis en 24 Mayo 2017, 04:33 am
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
  1.    n=int(raw_input("introduce n: "))
  2.    a=int(raw_input("introduce a: "))
  3.    x=0
  4.    sumaintx=0
  5.    sumaintn=0
  6.  
  7.    x=-1
  8.    while(x<n):
  9.        x= (x +1)
  10.        sumaintx=0
  11.        sumaintn=0
  12.        #while(sumaintn-sumaintx!=a):
  13.          i= n-x
  14.          for i in range(n-x,n):
  15.              sumaintn=sumaintn+i
  16.              for j in range(0,x):
  17.                  sumaintx=sumaintx+j
  18.        if(sumaintn-sumaintx==a):
  19.            print x


Título: Re: Ejercicio Bucle While en Python
Publicado por: engel lex en 24 Mayo 2017, 06:30 am
viendo matemáticamente esto no tiene muchos ciclos

Citar
la 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