[Python se da cuenta del triángulo de Yang Hui]

Tabla de contenido

¿Qué es el Triángulo Yang Hui?

Solución del triángulo de Yang Hui

1. Definición

2. Calcular el método del complemento 0 del triángulo de Yang Hui

 3. Triángulo de Yanghui, método de simetría

 4. Triángulo Yang Hui, método de tabla única

5. Anidamiento de listas (arreglo bidimensional)

6. Líneas nuevas y antiguas, abra una nueva línea a la vez

7. función de rendimiento

8. función de cremallera

Link de referencia:


1. ¿Qué es el triángulo Yang Hui?

El triángulo de Yang Hui es una disposición geométrica de coeficientes binomiales en un triángulo, que apareció en el libro " Explicación detallada del algoritmo de nueve capítulos " escrito por Yang Hui , un matemático de la dinastía Song del Sur en 1261 . En Europa, Pascal (1623-1662) descubrió esta regla en 1654 , por lo que esta tabla también recibe el nombre de triángulo de Pascal . El descubrimiento de Pascal fue 393 años más tarde que el de Yang Hui y 600 años más tarde que el de Jia Xian .

Triángulo Yang Hui - Alchetron, The Free Social Encyclopedia

Propiedades del triángulo Yang Hui:

Cada número es igual a la suma de los números izquierdo y derecho en la fila anterior. Es decir, el número i-ésimo en la fila n+1 es igual a la suma del número i-1-ésimo y el número i-ésimo en la fila n.

Para resolver este problema y conocer más soluciones, busqué información en Internet y resumí las soluciones.

2. Solución del triángulo de Yanghui

1. Definición

Ideas:

A partir de la tercera fila, el principio y el final de cada fila son 1, y cada número del medio es igual a la suma de los números izquierdo y derecho de la fila anterior. Primero defina el primer número de cada fila, luego use las reglas para operar en la parte central y finalmente agregue el último elemento.

PD: esta solución es relativamente fácil de encontrar

código:

# 计算杨辉三角 定义法
n = eval(input("输入要打印的行数:"))
triangle = [[1], [1, 1]]
for i in range(2, n):  # 已经给出前两行,求剩余行
    pre = triangle[i-1]  # 上一行
    cul = [1]  # 定义每行第一个元素
    for j in range(i-1):  # 算几次
        cul.append(pre[j]+pre[j+1])  # 每个数字等于上一行的左右两个数字之和。
    cul.append(1)  # 添加每行最后一个元素
    triangle.append(cul)
print("普通输出:{}".format(triangle))
for i in range(n):  # 按等边三角形格式输出
    s = " "*(n-i-1)
    for j in triangle[i]:
        s = s + str(j)+" "
    print(s)

resultado de la operación

El método de definición también puede usar el siguiente formulario, primero proporcione una lista vacía, primero agregue la lista a través del bucle y luego modifique la lista

el código

n = eval(input())
triangle = []
for i in range(n):
    cur = [1]
    triangle.append(cur)    #先追加进去
    if i == 0:
        continue
    pre = triangle[i-1]
    for j in range(i-1):
        cur.append(pre[j] + pre[j+1])
    cur.append(1)
print(triangle)

2. Método del complemento 0

El método de relleno cero se basa en el método de definición, agregando [0] a la línea anterior, luego cada línea solo necesita definir el primer elemento de cada línea, y los elementos restantes de esta línea se pueden agregar agregando la izquierda y Los elementos correctos de la línea anterior se obtienen. Vale la pena señalar que el relleno cero es solo para las variables de proceso intermedias y no afecta el resultado de salida.

el código

# 计算杨辉三角 补0法
triangle = [[1]]
n = eval(input("输入行数:"))
for i in range(1, n):
    swap = triangle[i-1]+[0]
    cul = [1]
    for j in range(len(swap)-1):
        cul.append(swap[j]+swap[j+1])
    triangle.append(cul)
print(triangle)

resultado de la operación

 

3. Método de simetría

tren de pensamiento

Determinación del punto medio:

código:

# 杨辉三角,对称法
n = eval(input("输入要打印的行数:"))
triangle = [[1], [1, 1]]
for i in range(2, n):
    tmp = triangle[-1]#上一个列表
    cul = [1] * (i+1)
    for j in range(i//2): #有图知:大概的临界值为一半,再仔细推敲
        cul[j+1] = tmp[j]+tmp[j+1]
        if i != 2j:#当j不为中点时
            cul[-j-2] = cul[j+1]
    triangle.append(cul)
print(triangle)

resultado de la operación

4. Triángulo Yang Hui, método de tabla única

el código

# 杨辉三角,单列表解决
n = eval(input("输入要打印的行数:"))
row = [1] * n
for i in range(n):
    z = 1
    offset = n - i
    for j in range(1, i//2+1):
        val = z + row[j]
        z = row[j]
        row[j] = val
        if i != 2*j:
            row[-j - offset] = val
    print(row[:i+1])

resultado de la operación

5. Anidamiento de listas (arreglo bidimensional)

Concepto: lista1[n][m] = lista1[n-1][m-1] + lista1[n-1][m]

el código

n=int(input())
list1=[]
for n in range(n):
    row=[1] # 第一行第一列为1
    list1.append(row)

    if n==0:
        for num in row:  # 这里主要是为输出做的格式处理
            print(num,end=" ")
            print()
        continue
    for m in range(1,n):
        row.append(list1[n-1][m-1]+list1[n-1][m])
    row.append(1)

    for num in row:
        print(num, end=" ")
    print()

Este método utiliza la lista List para realizar la matriz bidimensional

6. Líneas nuevas y antiguas, abra una nueva línea a la vez

el código

m = eval(input("输入要输出的行数:"))
# 新旧两行,一次性开辟新行
ordline = []
for i in range(m):
    newline = [1] * (i+1)
    for j in range(2, i+1):
        newline[j-1] = oldline[j-1]+oldline[j-2]
    oldline = newline
    print(newline)

resultado de la operación

 Entre ellos, a través del cálculo y la comparación, el quinto método de abrir espacio de memoria a la vez es más rápido que el primer método de agregar nuevo espacio de memoria a través de agregar para cada cálculo.

7. función de rendimiento

L se puede definir como un generador usando la función de rendimiento

el código

def triangles():
    L = [1]              #定义L为一个只包含一个元素的列表
    while True:
        yield L          #定义为生成器函数
        L =[1] + [L[n] + L[n-1] for n in range(1,len(L))] + [1]

n = 0
for t in triangles():
    print(t)
    n = n + 1
    if n == 10:
        break

8. función de cremallera

La  función zip() se usa para tomar un objeto iterable como parámetro, empaquetar los elementos correspondientes en el objeto en tuplas y luego devolver una lista compuesta por estas tuplas.

Si el número de elementos de cada iterador es inconsistente, la longitud de la lista devuelta es la misma que la del objeto más corto y la tupla se puede descomprimir en una lista usando el operador *.

tren de pensamiento

 Características del triángulo Yang Hui:

el código

def triangles():
    n = [1]
    while True:
        yield n
        n = [x+y for x,y in zip([0] + n,n+[0])]

n = 0
for t in triangles():
    print(t)
    n = n + 1
    if n == 10:
        break

 resultado de la operación

 

Link de referencia:

Varias soluciones del triángulo de Yang Hui (python)_blog de sangre de vampiro-CSDN blog_Python del triángulo de Yang Hui

Python——Yang Hui Triangle-He oído- Blog Garden

Dos métodos y explicaciones detalladas de Python imprimiendo el triángulo de Yang Hui - Se busca programador

Triángulo de Yanghui (método de implementación de Python súper simple)_3Sunremitting's blog-CSDN blog_python Triángulo de Yanghui

Análisis del uso de Python yield | Tutorial para principiantes

Función zip() de Python3 | Tutorial para principiantes

Supongo que te gusta

Origin blog.csdn.net/W_chuanqi/article/details/123679167
Recomendado
Clasificación