Tabla de contenido
¿Qué es el Triángulo Yang Hui?
Solución del triángulo de Yang Hui
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
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:
Python——Yang Hui Triangle-He oído- Blog Garden
Análisis del uso de Python yield | Tutorial para principiantes