(转)用shell脚本实现杨辉三角的4个实例!
概述:
中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,
而杨辉三角的发现就是十分精彩的一页。
杨辉三角形,是二项式系数在三角形中的一种几何排列。
杨辉三角图:
杨辉三角性质:
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个实例!的更多相关文章
- Makefile总结和反序字符数组,整体右移数组,杨辉三角!
2015.1.23今天我值日 继续接着昨天Makefile的目标开始记录:第一种:有 .PHNOY声明,但是冒号后面没有依赖文件.PHNOY:clean clean://没有依赖文件 rm *.0 t ...
- [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, ...
- [LeetCode] Pascal's Triangle 杨辉三角
Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...
- POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]
Irrelevant Elements Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2407 Accepted: 59 ...
- python生成器实现杨辉三角
def triangels(): """ 杨辉三角 """ lst = [1] n_count = 2 # 下一行列表长度 while Tr ...
- python 生成器生成杨辉三角
用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...
- HDNOIP201405杨辉三角
2016.1.27 试题描述 杨辉三角是形如如下的数字三角形: 1 1 1 1 2 1 …… 现在想求出杨辉三角第N行的N个数中,有多少个数能被给定的质数p整除. 输入 一行两个空格隔 ...
- Java的二维数组的应用及杨辉三角的编写
(1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个 ...
- POJ3187Backward Digit Sums[杨辉三角]
Backward Digit Sums Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6350 Accepted: 36 ...
随机推荐
- 编写高质量代码改善C#程序的157个建议——建议11: 区别对待==和Equals
建议11: 区别对待==和Equals 在开始本建议之前,首先要明确概念“相等性”.CLR中将“相等性”分为两类:“值相等性”和“引用相等性”.如果用来比较的两个变量所包含的数值相等,那么将其定义为“ ...
- Jquery queue实例
$(function () { var queueList = [ function () { $("div").animate({ height: 80, top: 40 }, ...
- javascript webstorm用法
javascript webstorm用法 一.什么是webstorm? WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“We ...
- this、static、main方法、静态代码块、final关键字、Runtime类、Cloneable类、类成员的访问控制权限、异常体系
this表示当前对象,用在方法内部,当某对象调用该方法时,该方法中的this就代表调用该方法的对象: static关键字: 修饰类属性后,该属性就成为该类所有实例的公共属性,修改该属性值,所有的实例的 ...
- oracle查询分区表中的数据
select * from TABLE_NAME partition(分区名) T WHERE T.COL_NAME= 'XX';
- 【bzoj3576】[Hnoi2014]江南乐 数论分块+博弈论
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F ...
- Communication with each role instance in Azure
Use WCF Communication with role instance in azure 1)In worker role build WCF Service public overrid ...
- django 部署到Ubuntu安装MYSQL56
阿里云 Ubuntu 14.04 安装mysql 5.6 1.升级apt-get sudo apt-get update 2. 安装mysql5.6版本 apt-get install mysql-s ...
- 190225RabbitMQ
一.简单的RabbitMQ示例 生产者 # Author:Li Dongfei import pika connection = pika.BlockingConnection( pika.Conne ...
- SDUT OJ 数据结构实验之链表四:有序链表的归并
数据结构实验之链表四:有序链表的归并 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Desc ...