杨辉三角

杨辉三角

是什么?

杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。

(重点)特点?

(1)每个数等于它上方两数之和。

(2)每行数字左右对称,由1开始逐渐变大。

(3)第n行的数字有n项。

(4)前n行共[(1+n)n]/2 个数。

    根据杨辉三角的特点进行编写代码

解题?

思路:
   杨辉三角的特点即是思路。只不过根据杨辉三角的第一个特点我们可以创建一个列表用来存储那些已经打印出来的数据,这样我们在杨辉三角的第三行开始(除了每一行的开头和结尾都是1以外)通过数组中来得出
上方两数之和。

如下图所示:

代码1

n=int(input())
a=[1,1,1]
for i in range(1,n+1):
    j=n-i
    while j>0:
        print(chr(32).ljust(4,' '),end='')
        j-=1
        
    if i==1:
        print(str(1).ljust(5,' '))
    elif  i==2:
        print(str(1).ljust(5,' '),end='')
        print(str(1).ljust(5,' '))
    elif i>2:
        l=i-1
        k=(l*(l-1))//2
        print(str(1).ljust(5,' '),end='')
        a.append(1)
        while k<(l*(l+1))//2-1:
            print(str(a[k]+a[k+1]).ljust(5,' '),end='')
            a.append(a[k]+a[k+1])
            k+=1
        print(str(1).ljust(5,' '))
        a.append(1)

上述代码的注释根据上述图可以知道(这里要使杨辉三角好看,就要特别注意每个数字的间隔,这个间隔问题还没处理好)

 代码2

def yanghuisanjiao(a,n): #打印出杨辉三角图形
    l=n+1 #l表示打印杨辉三角的层数
    k=0 #k表示杨辉三角从第三层开始第二个数的值为a[k]+a[k+1],k的下标从0开始
    for i in range(1,l+1): #表示杨辉三角打印的层数
        for j in range(1,l+1-i): #表示杨辉三角的第i层开头有多少空格
            print(' '*n,end='')
        if i==1:  #表示打印第一行的情况
            print(str(1).ljust(2*n,' '))
        elif i==2: #表示打印第二行的情况
            print(str(1).ljust(2*n,' '),end='')
            print(str(1).ljust(2*n,' '))
        elif i>2: #表示打印从第三行开始到最后一行的情况
            print(str(1).ljust(2*n,' '),end='') #打印开头的第一个数字(这个数字是固定为1)
            t=len(a) #表示为前i-1层数字的个数
            while k<t-1: #表示第i层需要求和的次数。(例如:第三层需要求和的数只有一个)
                m=a[k]+a[k+1]
                print(str(m).ljust(2*n,' '),end='')
                a.append(m) #将求和的数字存入到a列表中
                k+=1 #表示求和的往下一个开始
            print(str(1).ljust(2*n,' '))
            a.append(1) #将最后的一个1存入到a列表中,但每次开头的1不用加入a列表中,应为这层比上一层少一个开始的1.
        
n=int(input())
a=[1,1] #表示第三行的求和开始是第二层开始,即使现存好第二次的内容。
yanghuisanjiao(a,n)

题目来自蓝桥杯算法提高- c++_ch03_02 - C语言网 (dotcpp.com)

posted @ 2022-03-27 00:06  天空之城—我的理想国  阅读(257)  评论(0编辑  收藏  举报