概述:
    中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,
而杨辉三角的发现就是十分精彩的一页。
杨辉三角形,是二项式系数在三角形中的一种几何排列。
杨辉三角图:

杨辉三角性质:
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编程部分内部学生练习资料,
在这里和大家一起分享,希望大家一起探讨,找到更多更好的方法。

实现脚本一(重点):

  1. #!/bin/bash
  2. export LANG="zh_CN.GB18030"
  3. #本文内容来自《老男孩linux运维实战培训中心》shell编程部分内部学生练习资料
  4. #欢迎广到运维兄弟一起交流linux/unix网站运维技术!
  5. #网站运维交流群:114580181 45039636 37081784
  6. #老男孩 QQ:31333741
  7. #mail:31333741@qq.com
  8. #blog:http://oldboy.blog.51cto.com
  9. #judge input
  10. if (test -z $1) ;then
  11. read -p "Input Max Int Lines:" MAX
  12. else
  13. MAX=$1
  14. fi
  15. #judge int
  16. [ -n "`echo $MAX|sed 's/[0-9]//g'`" ] && \
  17. echo "Oldboy say,the num your input must be int,thank you,bye!" && exit 1
  18. #require <10
  19. [ ! $MAX -lt 10 ] && \
  20. echo "Oldboy say,the num your input must be int(1-9),thank you,bye!" && exit 1
  21. #start
  22. a[0]=1
  23. for((i=0;i<=MAX;i++))
  24. do
  25. for ((j=$i;j>0;j--))
  26. do
  27. ((a[$j]+=a[$j-1]))
  28. done
  29. for ((j=0;j<=$[MAX-$i];j++))
  30. do
  31. if [ $MAX -le 6 ]
  32. then
  33. echo -en "\t"
  34. else
  35. echo -n "   "
  36. fi
  37. done
  38. for ((j=0;j<=$i;j++))
  39. do
  40. if [ $MAX -le 6 ]
  41. then
  42. echo -en "\t\t"${a[$j]}
  43. else
  44. echo -n ${a[$j]}"      "
  45. fi
  46. done
  47. echo
  48. 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语法结合的手法,希望同学们能掌握之。
    网上的高手朋友,如果有更好的方法欢迎一起交流探讨!
   
实现脚本二:

  1. #!/bin/bash
  2. if (test -z $1) ;then
  3. read -p "Input Max Lines:" MAX
  4. else
  5. MAX=$1
  6. fi
  7. i=1
  8. while [ $i -le $MAX ]   #i行控制
  9. do
  10. j=1
  11. while [ $j -le $i ]        #j列控制
  12. do
  13. f=$[i-1]        #f=i-1 这是另一种计算写法。
  14. g=$[j-1]        #g=j-1 这是另一种计算写法。
  15. if [ $j -eq $i ] || [ $j -eq 1 ] ; then
  16. declare SUM_${i}_$j=1           #声明变量 头尾都是1
  17. else
  18. declare A=$[SUM_${f}_$j]       #取上一行的j列变量
  19. declare B=$[SUM_${f}_$g]       #取上一行的j-1列变量
  20. declare SUM_${i}_$j=`expr $A + $B`    #声明并计算当前变量的值
  21. fi
  22. echo -en $[SUM_${i}_$j]" "  #输出当前变量
  23. let j++
  24. done
  25. echo       #换行
  26. let i++
  27. done

实现脚本三:

  1. #!/bin/bash
  2. #History
  3. #2006.05.22    oldboy    QQ:31333741
  4. #i表示当前行
  5. #j表示当前位置
  6. #f/g表示上一行、上一位置
  7. if (test -z $1) ;then
  8. read -p "Input Max Int Lines:" MAX
  9. else
  10. MAX=$1
  11. fi
  12. for ((i=1;i<=MAX;i++))
  13. do
  14. for ((j=1;j<=i;j++))
  15. do
  16. f=$(($i-1))
  17. g=$(($j-1))
  18. if [ "$j" == 1 ];then
  19. declare SUM_${i}_$j=1
  20. else
  21. declare  A=$[SUM_${f}_$j]
  22. declare  B=$[SUM_${f}_$g]
  23. declare  SUM_${i}_$j=`expr $A + $B`
  24. fi
  25. echo -n $[SUM_${i}_$j]
  26. echo -en "  "
  27. done
  28. echo  "  "
  29. done
  30. 执行结果:
  31. [root@oldboy scripts]# bash oldboy.sh
  32. Input Max Lines:10
  33. 1
  34. 1  1
  35. 1  2  1
  36. 1  3  3  1
  37. 1  4  6  4  1
  38. 1  5  10  10  5  1
  39. 1  6  15  20  15  6  1
  40. 1  7  21  35  35  21  7  1
  41. 1  8  28  56  70  56  28  8  1
  42. 1  9  36  84  126  126  84  36  9  1

 实现脚本4

  1. #!/bin/bash
  2. #
  3. # Yang_Hui_Triangle
  4. Yang_Hui_Triangle()
  5. {
  6. vector[0]=1
  7. echo ${vector[0]}
  8. for((row=1; row<=${1}; ++row))
  9. do
  10. vector[row]=1
  11. for((col=row-1; col>0; --col))
  12. do
  13. ((vector[col]+=vector[col-1]))
  14. done
  15. for((col=0; col<=row; ++col))
  16. do
  17. echo -n "${vector[col]} "
  18. done
  19. echo
  20. done
  21. }
  22. 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个实例!的更多相关文章

  1. Makefile总结和反序字符数组,整体右移数组,杨辉三角!

    2015.1.23今天我值日 继续接着昨天Makefile的目标开始记录:第一种:有 .PHNOY声明,但是冒号后面没有依赖文件.PHNOY:clean clean://没有依赖文件 rm *.0 t ...

  2. [LeetCode] Pascal's Triangle II 杨辉三角之二

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  3. [LeetCode] Pascal's Triangle 杨辉三角

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...

  4. POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]

    Irrelevant Elements Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2407   Accepted: 59 ...

  5. python生成器实现杨辉三角

    def triangels(): """ 杨辉三角 """ lst = [1] n_count = 2 # 下一行列表长度 while Tr ...

  6. python 生成器生成杨辉三角

    用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...

  7. HDNOIP201405杨辉三角

    2016.1.27 试题描述 杨辉三角是形如如下的数字三角形: 1 1    1 1   2    1 …… 现在想求出杨辉三角第N行的N个数中,有多少个数能被给定的质数p整除. 输入 一行两个空格隔 ...

  8. Java的二维数组的应用及杨辉三角的编写

    (1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个 ...

  9. POJ3187Backward Digit Sums[杨辉三角]

    Backward Digit Sums Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6350   Accepted: 36 ...

随机推荐

  1. 团队项目第六周-Alpha阶段项目复审(深海划水队)

    经小组讨论后得出以下排名: 队名 优点 缺点 排名 大猪蹄子队 界面优美,功能简洁易懂,单词解释较为完善 互动方式.操作简易性有待优化,有部分功能尚未完成 1 Running Duck队 基本功能已经 ...

  2. SignalR 跨域解决方案全面

    SignalR 分:PersistentConnection和Hub 2种模式. 跨域又分:UseCors和JsonP  2种方法 所以例子写了4种. 核心代码: UseCors //Persiste ...

  3. arcconf工具相关命令V1.0

    arcconf工具相关命令V1.0 清除当前所有raid配置 Arcconf  delete  1  array  all       #删除所有逻辑盘 Arcconf  uninit  1  all ...

  4. IEnumerable、GetEnumerator、IEnumerator之间的关系。

    了解了这些也就明白了遍历的原理,晚安. using System; using System.Collections; public class Person { public Person(stri ...

  5. Jquery 页面元素事件绑定

    场景: 用一个Table来展示数据信息列表,通过鼠标点击Table中的Tr来获取到当前选中的数据行信息. <table class="Table" width="1 ...

  6. Linux服务器其中一个磁盘满了怎么办?在不做磁盘扩容的情况下,一个软连接就搞定。

    适用环境要求:Linux系统及服务器.有管理员权限.存在多余空间的磁盘例如下图中"/home"在磁盘sda5中与"/"不属于同一块磁盘: 1.首先转移正在使用的 ...

  7. UIButton的几种触发方式

    1.说明 说明:由于是在"iOS 模拟器"中测试的,所以不能用手指,只能用鼠标. 1)UIControlEventTouchDown 指鼠标左键按下(注:只是"按下&qu ...

  8. 洛谷P4014 分配问题(费用流)

    传送门 可以把原图看做一个二分图,人在左边,任务在右边,求一个带权的最大和最小完美匹配 然而我并不会二分图做法,所以只好直接用费用流套进去,求一个最小费用最大流和最大费用最大流即可 //minamot ...

  9. [集合]线程安全的HashMap

    一.一般模式下线程安全的HashMap 默认情况常用的HashMap都是线程不安全的,在多线程的环境下使用,常常会造成不可预知的,莫名其妙的错误.那么,我们如何实现一个线程安全的HashMap呢?其中 ...

  10. [BJOI2012]连连看 BZOJ2661 费用流

    题目描述 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y ...