根據楊輝三角形的每行元素第一位與最後一位都是1,且每一個數等於它上方兩數之和,且每行元素數等於行數。利用這些規律,咱們很簡單的就能夠把楊輝三角形實現出來了!
個人想法是用二個數組,循環相互根據對方元素來對本身的元素進行賦值,且首尾都爲1
好吧!講的比較亂,但願你能夠看的懂,下面是代碼實現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
執行結果:
Okay!大功告成!
若是做者有錯誤或者須要改進的地方請留言告知哦!bash