zoukankan      html  css  js  c++  java
  • 使用脚本打印杨辉三角

    杨辉三角,是二项式系数在三角形中的一种几何排列。

    使用shell 和python 打印杨辉三角,比较差异

    shell:

    root@virtual:~# cat triangles.sh 
    #!/bin/bash
    # Author: xieshengsen
    
    # 打印数学杨辉三角
    
    if (test -z $1) ; then
    read -p "Input Max Lines:" Max
    else
    Max=$1
    fi
    
    i=1
    while [ $i -le $Max ]
    do
    j=1
    while [ $j -le $i ]
    do
    f=$[i-1]
    g=$[j-1]
    if [ $j -eq $i ] || [ $j -eq 1 ]; then
    declare SUM_${i}_$j=1
    else
    declare A=$[SUM_${f}_$j]
    declare B=$[SUM_${f}_$g]
    declare SUM_${i}_$j=`expr $A + $B`
    fi
    echo -en $[SUM_${i}_$j]" "
    let j++
    done
    echo
    let i++
    done
    root@virtual:~#
    
    root@virtual:~# . triangles.sh 10
    1 
    1 1 
    1 2 1 
    1 3 3 1 
    1 4 6 4 1 
    1 5 10 10 5 1 
    1 6 15 20 15 6 1 
    1 7 21 35 35 21 7 1 
    1 8 28 56 70 56 28 8 1 
    1 9 36 84 126 126 84 36 9 1 
    root@virtual:~#
    

      

    python:

    方法一:

    [root@cinder01 ~]# cat triangle_v1.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # Author:xieshengsen
    
    # 使用函数打印杨辉三角
    
    """
    第一次循环执行 yield L,输出【1】
    第二次循环执行 yield L 之后的语句 L.append(0)后,L =【1,0】,再执行后面的语句 L = [L[i - 1] + L[i] for i in range(len(L))] 此时L =【1,1】(i=0时 L[- 1] + L[0]为1,i =1时 L[0] + L[1]为1)直到再次遇到yield L语句,输出【1,1】
    第三次循环执行 yield L 之后的语句 L.append(0)后,L =【1,1,0】,再执行后面的语句 L = [L[i - 1] + L[i] for i in range(len(L))] 此时L =【1,2,1】(i=0时 L[- 1] + L[0]为1,i =1时 L[0] + L[1]为2,i=2时,L[1] + L[2]为1)直到再次遇到yield L语句,输出【1,2,1】
    """
    
    
    def triangles(n):
    L = [1]
    while True:
    yield L
    L.append(0)
    L = [L[ i - 1 ] + L[i] for i in range(len(L))]
    if len(L) > n:
    break
    m = triangles(10)
    for i in m:
    print (i)
    [root@cinder01 ~]# python triangle_v1.py 
    [1]
    [1, 1]
    [1, 2, 1]
    [1, 3, 3, 1]
    [1, 4, 6, 4, 1]
    [1, 5, 10, 10, 5, 1]
    [1, 6, 15, 20, 15, 6, 1]
    [1, 7, 21, 35, 35, 21, 7, 1]
    [1, 8, 28, 56, 70, 56, 28, 8, 1]
    [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
    [root@cinder01 ~]#
    

      

    方法二:

    [root@cinder01 ~]# cat triangle_v2.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # Author:xieshengsen
    
    """
    规律:
    1、每行开始和结尾都是1
    2、每行的数都是从两边都中间逐步变大(除第一、二行外)
    3、从第三行开始,每个数都等于上方两个数之和
    4、第n行有n个项
    5、每行的数字之和为2的n-1次方(上期写的是n-2)
    """
    
    def triangles(n):
    L = [1]
    while True:
    yield L
    L = [L[x]+L[x+1] for x in range(len(L)-1)]
    L.insert(0,1)
    L.append(1)
    if len(L) > n:
    break
    
    a = triangles(10)
    for i in a:
    print (i)
    [root@cinder01 ~]# python triangle_v2.py 
    [1]
    [1, 1]
    [1, 2, 1]
    [1, 3, 3, 1]
    [1, 4, 6, 4, 1]
    [1, 5, 10, 10, 5, 1]
    [1, 6, 15, 20, 15, 6, 1]
    [1, 7, 21, 35, 35, 21, 7, 1]
    [1, 8, 28, 56, 70, 56, 28, 8, 1]
    [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
    [root@cinder01 ~]#
    

      

  • 相关阅读:
    Tiny_4412的NFS挂载
    tiny4412学习一:编译uboot,体验裸机
    开通博客,记录历程,开启新的征程
    mysql 多表联合做运算(求俩点的距离)
    golang gin框架使用图形验证码
    js rgb和16进制相互转换
    [转载] Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例
    openstack golang sdk使用
    sendcloud golang 发送短信 示例代码
    Harbor配置https,并安装内容信任插件(notary)
  • 原文地址:https://www.cnblogs.com/xieshengsen/p/7146637.html
Copyright © 2011-2022 走看看