shell腳本實現楊輝三角形

根據楊輝三角形的每行元素第一位與最後一位都是1,且每一個數等於它上方兩數之和,且每行元素數等於行數。利用這些規律,咱們很簡單的就能夠把楊輝三角形實現出來了!
個人想法是用二個數組,循環相互根據對方元素來對本身的元素進行賦值,且首尾都爲1
shell腳本實現楊輝三角形
好吧!講的比較亂,但願你能夠看的懂,下面是代碼實現shell

#!/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

執行結果:
shell腳本實現楊輝三角形
Okay!大功告成!
若是做者有錯誤或者須要改進的地方請留言告知哦!bash

相關文章
相關標籤/搜索