Python-杨辉三角


============================================
计算杨辉三角前六行:

##求杨辉三角
ROW=10
lst[0]=[1]
lst[1]=[1,1]
print("  "*ROW,lst[0])
print("  "*(ROW-1),lst[1])
for I in range(2,ROW):
    length=len(lst[I-1])
    lst[I]=[1]
    for J in range(length-1):
        lst[I].append(lst[I-1][J]+lst[I-1][J+1])
    lst[I].append(1)
    print("  "*(ROW-I),lst[I])


-----------------
##两层循环打印杨辉三角

#使用二维数组
lst=[[1],[1,1]]
n=6
for I in range(2,n):
    lst.append([1])
    for J in range(0,I-1):
        lst[I].append(lst[I-1][J]+lst[I-1][J+1])
    lst[I].append(1)
print(lst)
----------------------

##使用一维数组
pre = [1]
n = 6
for I in range(n):
    print(pre)
    pre.append(0)
    newlst = []
    for J in range(I+2):
        newlst.append(pre[J-1] + pre[J])
    lst.append(newlst)
    pre=newlst
    
-----------------------
##在前后补0来计算;
lst = [[1]]
n = 6

for I in range(n):
    print(lst[I])
    lst[I].insert(0,0)
    lst[I].append(0)
    newlst=[]
    for J in range(I+2):
        newlst.append(lst[I][J]+lst[I][J+1])
    lst.append(newlst)

--------------------------
##只在后面补零计算杨辉三角
lst = [[1]]
n = 6
for I in range(n):
    print(lst[I])
    lst[I].append(0)
    newlst = []
    for J in range(I+2):
        newlst.append(lst[I][J-1]+lst[I][J])
    lst.append(newlst)
-------------------------
##对称性解法:
triangle = []
n  = 6
for I in range(n):
    row = [1] * (I + 1)
    triangle.append(row)
    for J in range(I//2):
        tmp = triangle[I-1][J] + triangle[I-1][J+1]
        row[J+1] = tmp
        if I % 2 == 1:
            row[-J-2] = tmp
print(triangle)

--------------------------------
#对称性,一位数组
n = 6
for I in range(n):
    new = [1] * (I + 1)
    for J in range(I // 2):
        tmp = pre[J] + pre[J+1]
        new[J+1] = tmp
        if I % 2 == 1:
            new[-J-2] = tmp
    pre = new
    print(pre)
-----------------------------
#对称性,一个一维数组
n = 6
new=[1] * (n)
for I in range(n):
    for J in range(I // 2):
        tmp = new[J] + new[J+1]
        new[J+1] = tmp
        if I % 2 == 1:
            new[-J-2] = tmp
print(new)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值