Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Problema: Street Numbers

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 5

Problema: Street numbers

Street numbers
Una programadora vive en una calle con N casas donde todas ellas están
numeradas de manera consecutiva desde el 1 hasta N. Un día, al salir a pasear
con su perro, salió de su casa, giró a la izquierda y fue hasta el final de la calle.
Al hacerlo fue sumando los números de las casas sin incluir el de la suya. Al día
siguiente hizo lo mismo pero habiendo girado a la derecha. Para su sorpresa,
ambas sumas fueron iguales.

Diseñemos entonces un algoritmo para determinar, dada una calle como la de la


programadora con por lo menos 3 casas, cuál es el número de la casa que
cumple esa propiedad, o si por el contrario no hay ninguna que lo cumpla.

Así por ejemplo, si N es 8 la respuesta debe ser la casa 6, mientras que si N es 5


la respuesta es que no hay ninguna casa que satisfaga la propiedad.
Solución 1
read N Número de operaciones:
for i=2 to N-1:
sumaIzq = 0 1+ 𝑁−2 1+1+1+1+1+ 𝑁−3 ∗1
for j=1 to i-1:
sumaIzq += j → 𝑓 𝑁 = 𝑁2 − 3
sumaDer = 0
for k=i+1 to N: → 𝑂(𝑁 2 )
sumaDer += k
if sumaIzq = sumaDer:
print i
exit
print ‘no hay’
Solución 2
𝑁
𝑁(𝑁 + 1) Ejemplo: 1 2 3 4 5 6 7 8 9 10
Sabiendo que ෍ 𝑖 = 2
𝑖=1 11
11
11
read N 11
for i=2 to N-1: 11
sumaIzq = i(i-1)/2
sumaDer = (N(N+1)-i(i+1))/2
Número de operaciones:
if sumaIzq = sumaDer:
print i
1+ 𝑁−2 1+1+1+1+1
exit
print ‘no hay’
→ 𝑓 𝑁 = 5𝑁 − 9

→ 𝑂(𝑁)
Solución 3
Cambiando el condicional por una igualdad y luego despejando i

𝑖(𝑖 − 1) 𝑁 𝑁 + 1 − 𝑖(𝑖 + 1) 𝑁2 + 𝑁
= → 𝑖=
2 2 2

read N
i = ((N2+N)/2) Número de operaciones:
if i = int(i):
print i 1+1+1+1+1
exit
else: →𝑓 𝑁 =5
print ‘no hay’
→ 𝑂(1)

También podría gustarte