本文共 2607 字,大约阅读时间需要 8 分钟。
根据杨辉三角形的每行元素第一位与最后一位都是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/bashYangHuiTriangle (){ 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." fidone
执行结果:
Okay!大功告成!如果作者有错误或者需要改进的地方请留言告知哦!转载于:https://blog.51cto.com/14233913/2374755