用shell脚本实现杨辉三角的4个实例!
2012-12-14 12:16
549 查看
概述:
中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,
而杨辉三角的发现就是十分精彩的一页。
杨辉三角形,是二项式系数在三角形中的一种几何排列。
杨辉三角图:
650) this.width=650;" alt="" border="0" src="http://img1.51cto.com/attachment/201201/120620850.jpg" />
杨辉三角性质:
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)行。
下面老男孩来带大家使用某些开发人员认为最土的shell脚本来实现:
本文内容来自《老男孩linux运维实战培训中心》shell编程部分内部学生练习资料,
在这里和大家一起分享,希望大家一起探讨,找到更多更好的方法。
实现脚本一(重点):
执行结果:
[oldboy@A ~]$ bash oldboy_training.sh 4
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
[oldboy@A ~]$ bash oldboy_training.sh 10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
结论说明:
这个脚本难度一般,但是包含大量的shell基本语法,及相关解决问题技巧。值得每一个运维工程师,学习研究。 在写脚本时,老男孩也特意使用了多个shell语法结合的手法,希望同学们能掌握之。
网上的高手朋友,如果有更好的方法欢迎一起交流探讨!
实现脚本二:
实现脚本三:
实现脚本4
脚本4为永夜兄弟提供!
执行结果:
[oldboy@A ~]$ bash yang.sh 10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
(over)
本文出自 “老男孩的linux博客” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/756234
中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,
而杨辉三角的发现就是十分精彩的一页。
杨辉三角形,是二项式系数在三角形中的一种几何排列。
杨辉三角图:
650) this.width=650;" alt="" border="0" src="http://img1.51cto.com/attachment/201201/120620850.jpg" />
杨辉三角性质:
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)行。
下面老男孩来带大家使用某些开发人员认为最土的shell脚本来实现:
本文内容来自《老男孩linux运维实战培训中心》shell编程部分内部学生练习资料,
在这里和大家一起分享,希望大家一起探讨,找到更多更好的方法。
实现脚本一(重点):
#!/bin/bash export LANG="zh_CN.GB18030" #本文内容来自《老男孩linux运维实战培训中心》shell编程部分内部学生练习资料 #欢迎广到运维兄弟一起交流linux/unix网站运维技术! #网站运维交流群:114580181 45039636 37081784 #老男孩 QQ:31333741 #mail:31333741@qq.com #blog:http://oldboy.blog.51cto.com #judge input if (test -z $1) ;then read -p "Input Max Int Lines:" MAX else MAX=$1 fi #judge int [ -n "`echo $MAX|sed 's/[0-9]//g'`" ] && \ echo "Oldboy say,the num your input must be int,thank you,bye!" && exit 1 #require <10 [ ! $MAX -lt 10 ] && \ echo "Oldboy say,the num your input must be int(1-9),thank you,bye!" && exit 1 #start a[0]=1 for((i=0;i<=MAX;i++)) do for ((j=$i;j>0;j--)) do ((a[$j]+=a[$j-1])) done for ((j=0;j<=$[MAX-$i];j++)) do if [ $MAX -le 6 ] then echo -en "\t" else echo -n " " fi done for ((j=0;j<=$i;j++)) do if [ $MAX -le 6 ] then echo -en "\t\t"${a[$j]} else echo -n ${a[$j]}" " fi done echo done
执行结果:
[oldboy@A ~]$ bash oldboy_training.sh 4
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
[oldboy@A ~]$ bash oldboy_training.sh 10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
结论说明:
这个脚本难度一般,但是包含大量的shell基本语法,及相关解决问题技巧。值得每一个运维工程师,学习研究。 在写脚本时,老男孩也特意使用了多个shell语法结合的手法,希望同学们能掌握之。
网上的高手朋友,如果有更好的方法欢迎一起交流探讨!
实现脚本二:
#!/bin/bash if (test -z $1) ;then read -p "Input Max Lines:" MAX else MAX=$1 fi i=1 while [ $i -le $MAX ] #i行控制 do j=1 while [ $j -le $i ] #j列控制 do f=$[i-1] #f=i-1 这是另一种计算写法。 g=$[j-1] #g=j-1 这是另一种计算写法。 if [ $j -eq $i ] || [ $j -eq 1 ] ; then declare SUM_${i}_$j=1 #声明变量 头尾都是1 else declare A=$[SUM_${f}_$j] #取上一行的j列变量 declare B=$[SUM_${f}_$g] #取上一行的j-1列变量 declare SUM_${i}_$j=`expr $A + $B` #声明并计算当前变量的值 fi echo -en $[SUM_${i}_$j]" " #输出当前变量 let j++ done echo #换行 let i++ done
实现脚本三:
#!/bin/bash #History #2006.05.22 oldboy QQ:31333741 #i表示当前行 #j表示当前位置 #f/g表示上一行、上一位置 if (test -z $1) ;then read -p "Input Max Int Lines:" MAX else MAX=$1 fi for ((i=1;i<=MAX;i++)) do for ((j=1;j<=i;j++)) do f=$(($i-1)) g=$(($j-1)) if [ "$j" == 1 ];then declare SUM_${i}_$j=1 else declare A=$[SUM_${f}_$j] declare B=$[SUM_${f}_$g] declare SUM_${i}_$j=`expr $A + $B` fi echo -n $[SUM_${i}_$j] echo -en " " done echo " " done 执行结果: [root@oldboy scripts]# bash oldboy.sh Input Max Lines:10 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1
实现脚本4
#!/bin/bash # # Yang_Hui_Triangle Yang_Hui_Triangle() { vector[0]=1 echo ${vector[0]} for((row=1; row<=${1}; ++row)) do vector[row]=1 for((col=row-1; col>0; --col)) do ((vector[col]+=vector[col-1])) done for((col=0; col<=row; ++col)) do echo -n "${vector[col]} " done echo done } Yang_Hui_Triangle ${1}
脚本4为永夜兄弟提供!
执行结果:
[oldboy@A ~]$ bash yang.sh 10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
(over)
本文出自 “老男孩的linux博客” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/756234
相关文章推荐
- 用shell脚本实现杨辉三角的4个实例!
- 用shell脚本实现杨辉三角的4个实例
- shell脚本实现快速生成xml格式sitemap实例分享
- [shell实例]——用脚本实现向多台服务器批量复制文件(nmap、scp)
- 实现自动清除日期目录shell脚本实例代码
- 如何用shell脚本实现自动监测mysql实例状态
- shell编程实例---实现整数的加减乘除余运算(利用read和脚本传参的方式)
- shell脚本实现快速生成xml格式sitemap实例分享
- Shell实现多级菜单系统安装维护脚本实例分享
- Shell实现多级菜单系统安装维护脚本实例分享
- Shell实现多级菜单系统安装维护脚本实例分享
- Shell实现多级菜单系统安装维护脚本实例分享
- shell脚本实现ssh自动登录功能分享
- Linux(7) 常用命令扩展 改变用户环境变量 (可以实现登陆就执行shell脚本)
- shell 脚本实现的守护进程
- shell(一) 入门到复杂 自己做的各种脚本实例与解释
- Shell小脚本:实现自动安装Asterisk和DAHDI
- linux下采用shell脚本实现批量为指定文件夹下图片添加水印的方法
- shell脚本通过expect脚本实现自动输入密码
- shell 脚本实现文件打包