码迷,mamicode.com
首页 > 系统相关 > 详细

shell脚本实现杨辉三角形

时间:2019-04-06 19:08:08      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:The   shadow   process   自己   false   term   input   src   51cto   

根据杨辉三角形的每行元素第一位与最后一位都是1,且每个数等于它上方两数之和,且每行元素数等于行数。利用这些规律,我们很简单的就可以把杨辉三角形实现出来了!
我的想法是用二个数组,循环相互根据对方元素来对自己的元素进行赋值,且首尾都为1
技术图片
好吧!讲的比较乱,希望你可以看的懂,下面是代码实现

    #!/bin/bash
    declare -a triangle
    declare -a triangleTwo
    #给数组的第一个元素赋值
    triangle[0]=1
    triangleTwo[0]=1
    #立flag,用于循环中轮流执行某代码段
    flag=true
    #先打印triangle数组的1
    echo $triangle
    #先来用一个5行的杨辉三角形
    for ((i=1;i<$1;i++)); do
        #利用if else语句来循环轮流执行的代码段
        if $flag; then
            #把triangle的元素个数取出来,再利用它来进行下面的循环次数
            numbers=${#triangle[*]}
            #给最后一个字符赋值为1
            triangleTwo[$numbers]=1
            #根据triangle的长度,来确定循环赋值执行的次数
            for ((x=1;x<=${numbers};x++));do
                #triangleTwo的值来处于triangle的相邻两位元素
                triangleTwo[x]=$((triangle[$[x-1]]+triangle[x]))
            done
            #打印triangleTwo数组
            echo ${triangleTwo[*]}
            #更改fla  g,做到循环执行代码段的效果
            flag=false
        else
            numbers=${#triangleTwo[*]}
            triangle[$numbers]=1
            for ((x=1;x<=${numbers};x++));do
                triangle[x]=$((triangleTwo[$[x-1]]+triangleTwo[x]))
            done
            echo ${triangle[*]} 
            flag=true
            fi  
    done

这样还不太够,我们还可以做到让用户输入行数,从而打印对应的行数

#!/bin/bash
YangHuiTriangle (){
    declare -a triangle
    declare -a triangleTwo
    #给数组的第一个元素赋值
    triangle[0]=1
    triangleTwo[0]=1
    #立flag,用于循环中轮流执行某代码段
    flag=true
    #先打印triangle数组的1
    echo $triangle
    #先来用一个5行的杨辉三角形
    for ((i=1;i<$1;i++)); do
        #利用if else语句来循环轮流执行的代码段
        if $flag; then
            #把triangle的元素个数取出来,再利用它来进行下面的循环次数
            numbers=${#triangle[*]}
            #给最后一个字符赋值为1
            triangleTwo[$numbers]=1
            #根据triangle的长度,来确定循环赋值执行的次数
            for ((x=1;x<=${numbers};x++));do
                #triangleTwo的值来处于triangle的相邻两位元素
                triangleTwo[x]=$((triangle[$[x-1]]+triangle[x]))
            done
            #打印triangleTwo数组
            echo ${triangleTwo[*]}
            #更改fla  g,做到循环执行代码段的效果
            flag=false
        else
            numbers=${#triangleTwo[*]}
            triangle[$numbers]=1
            for ((x=1;x<=${numbers};x++));do
                triangle[x]=$((triangleTwo[$[x-1]]+triangleTwo[x]))
            done
            echo ${triangle[*]} 
            flag=true
            fi
    done
}

while true; do 
    read -p "Please enter the number of elements(or input q to quit):" line
    [ "$line" == q ] && break
    if [[ $line =~ ^[0-9]+$ ]]; then
        YangHuiTriangle $line
    else
        echo "Please input correct number."
    fi
done        

执行结果:
技术图片
Okay!大功告成!
如果作者有错误或者需要改进的地方请留言告知哦!

shell脚本实现杨辉三角形

标签:The   shadow   process   自己   false   term   input   src   51cto   

原文地址:https://blog.51cto.com/14233913/2374755

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!