1. 程式人生 > >shell腳本實現楊輝三角形

shell腳本實現楊輝三角形

pre dfa please oss elements 更改 one 留言 proc

根據楊輝三角形的每行元素第一位與最後一位都是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腳本實現楊輝三角形