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

杨辉三角性质:
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. 编写高质量代码改善C#程序的157个建议——建议11: 区别对待==和Equals

    建议11: 区别对待==和Equals 在开始本建议之前,首先要明确概念“相等性”.CLR中将“相等性”分为两类:“值相等性”和“引用相等性”.如果用来比较的两个变量所包含的数值相等,那么将其定义为“ ...

  2. Jquery queue实例

    $(function () { var queueList = [ function () { $("div").animate({ height: 80, top: 40 }, ...

  3. javascript webstorm用法

    javascript  webstorm用法 一.什么是webstorm?       WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“We ...

  4. this、static、main方法、静态代码块、final关键字、Runtime类、Cloneable类、类成员的访问控制权限、异常体系

    this表示当前对象,用在方法内部,当某对象调用该方法时,该方法中的this就代表调用该方法的对象: static关键字: 修饰类属性后,该属性就成为该类所有实例的公共属性,修改该属性值,所有的实例的 ...

  5. oracle查询分区表中的数据

    select * from TABLE_NAME partition(分区名) T WHERE T.COL_NAME= 'XX';

  6. 【bzoj3576】[Hnoi2014]江南乐 数论分块+博弈论

    Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F ...

  7. Communication with each role instance in Azure

    Use WCF  Communication with role instance in azure 1)In worker role build WCF Service public overrid ...

  8. django 部署到Ubuntu安装MYSQL56

    阿里云 Ubuntu 14.04 安装mysql 5.6 1.升级apt-get sudo apt-get update 2. 安装mysql5.6版本 apt-get install mysql-s ...

  9. 190225RabbitMQ

    一.简单的RabbitMQ示例 生产者 # Author:Li Dongfei import pika connection = pika.BlockingConnection( pika.Conne ...

  10. SDUT OJ 数据结构实验之链表四:有序链表的归并

    数据结构实验之链表四:有序链表的归并 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Desc ...