根據楊輝三角形的每行元素第一位與最後一位都是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!大功告成!
如果作者有錯誤或者需要改進的地方請留言告知哦!