Mostrando las entradas con la etiqueta Triángulo. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Triángulo. Mostrar todas las entradas

¿Cómo sumar los números impares en un triángulo con Python?

Se quieres sumar los números impares, que tienen la siguiente distribución

      1
     3 5
   7 9 11
 13 15 17 19
 ...

Para entender la lógica, primero definimos una función que nos muestre estos números:

In [1]:
def imprimir(n):
    fila = 1
    cantidad_fila = 1 # cuantos numeros hay en la fila
    numero_inicio = 1 # el numero de inicio
    while fila <= n:
        s = ''
        for i in range(fila):
            s += ' '+str(numero_inicio)
            numero_inicio += 2
        print(s)
        fila += 1
        cantidad_fila += 1
imprimir(9)
 1
 3 5
 7 9 11
 13 15 17 19
 21 23 25 27 29
 31 33 35 37 39 41
 43 45 47 49 51 53 55
 57 59 61 63 65 67 69 71
 73 75 77 79 81 83 85 87 89

Podemos reducir la función teniendo en cuenta que fila y cantidad_fila, siempre son iguales:

In [2]:
def imprimir(n):
    fila = 1 # inica la fila actual, y cuantes elementos hay
    numero_inicio = 1 # el numero de inicio
    while fila <= n:
        s = ''
        for i in range(fila):
            s += ' '+str(numero_inicio)
            numero_inicio += 2
        print(s)
        fila += 1
imprimir(4)
 1
 3 5
 7 9 11
 13 15 17 19

Sumar todos los elementos hasta la fila n

Tomando como referencia la funcion imprimir(), definimos la siguiente función

In [14]:
def sumar_todo(n):
    fila = 1 # inica la fila actual, y cuantes elementos hay
    numero_inicio = 1 # el numero de inicio
    ans = 0 # suma en la fila n
    while fila <= n:
        for i in range(fila):
            ans += numero_inicio # aqui sumamos la fila
            numero_inicio += 2
        fila += 1
    return ans
sumar_todo(3)
Out[14]:
36
In [15]:
for x in range(5):
    ans = sumar_todo(x)
    print(ans)
0
1
9
36
100

Sumar los elementos de una fila

Para sumar los números de una fila, declaramos la siguiente función con similar lógica

In [7]:
def sumar_fila(n):
    fila = 1 # inica la fila actual, y cuantes elementos hay
    numero_inicio = 1 # el numero de inicio
    ans = 0 # suma en la fila n
    while fila <= n:
        for i in range(fila):
            if n == fila:
                ans += numero_inicio # aqui sumamos la fila
            numero_inicio += 2
        fila += 1
    return ans
sumar_fila(4)
Out[7]:
64

Veamos las suma de las primeras 10 filas

In [8]:
for x in range(10):
    ans = sumar_fila(x)
    print(ans)
0
1
8
27
64
125
216
343
512
729

Vemos que cada número es un cubo perfecto, entonces si sacamos su raiz cúbica tenemos:

In [9]:
import math
for x in range(10):
    ans = sumar_fila(x)
    print(ans,math.pow(ans,1/3))
0 0.0
1 1.0
8 2.0
27 3.0
64 3.9999999999999996
125 4.999999999999999
216 5.999999999999999
343 6.999999999999999
512 7.999999999999999
729 8.999999999999998

Es decir para la fila $n$ la suma en dicha fila es $n^3$