shell编程-杨辉三角问题:
概述:
中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,
而杨辉三角的发现就是十分精彩的一页。
杨辉三角形,是二项式系数在三角形中的一种几何排列。
杨辉三角图:
杨辉三角性质:
1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。
2、第n行的数字个数为n个。
3、第n行数字和为2^(n-1)。(2的(n-1)次方)
4、每个数字等于上一行的左右两个数字之和。
5、将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第2n个斐波那契数。将第2n行第2个数,跟第2n+1行第4个数、第2n+2行第6个数……这些数之和是第2n-1个斐波那契数。
6、第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3…依此类推。
7.两个未知数和的n次方运算后的各项系数依次为杨辉三角的第(n+1)行。
思路:
因为使用过Java及C通过二维数组的方式可以轻松实现。
但是shell只有一维数组和关联数组,如何才能实现呢?–>通过下标区分元素。
如上图,把元素下标看成i,j
j=0 或者 i=j的时候,元素的值即为1
代码:
#!/bin/bash
MAX=0
#如何启动脚本时没指定最大行数就提示用户输入
#并判断是否为整数 expr
flag=true
read -p "Please input a number:" MAX
while $flag;do
expr $MAX+0 &> /dev/null
[ $? -eq 0 ] && flag=flase || read -p "Please input a interger:"MAX
done
declare -a num
for(( i=0;i<max;i++ 0 ));do #打印每行杨辉三角 for(( j="0;j<=i;j++" if [ $j -eq -o $i ];then num[$i$j]="1" else let ii="i-1" jj="j-1" fi done #打印杨辉三角 关联数组 echo -e "${num[$i$j]} \t\c" < code></max;i++>
结果:
测试OK,暂时想到这种比较简单的实现方法,后续如果有好的方法再更新。
总结:
这个脚本难度一般,但是包含大量的shell基本语法,主要是回顾学习数组和嵌套循环的使用。
PS:不得不吐槽一句,shell真心不适合处理复杂运算,并且符号太多,很容易出错,调试就浪费了很多时间。
Original: https://www.cnblogs.com/cn-leoblog/p/15591227.html
Author: Leo’sblog
Title: shell编程-杨辉三角简单实现
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582702/
转载文章受原作者版权保护。转载请注明原作者出处!