使用脚本打印杨辉三角

杨辉三角,是二项式系数在三角形中的一种几何排列。

使用shell 和python 打印杨辉三角,比较差异

shell:

[email protected]:~# cat triangles.sh
#!/bin/bash
# Author: xieshengsen

# 打印数学杨辉三角

if (test -z $1) ; then
read -p "Input Max Lines:" Max
else
Max=$1
fi

i=1
while [ $i -le $Max ]
do
j=1
while [ $j -le $i ]
do
f=$[i-1]
g=$[j-1]
if [ $j -eq $i ] || [ $j -eq 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 -en $[SUM_${i}_$j]" "
let j++
done
echo
let i++
done
[email protected]:~#

[email protected]:~# . triangles.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
[email protected]:~#

  

python:

方法一:

[[email protected] ~]# cat triangle_v1.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:xieshengsen

# 使用函数打印杨辉三角

"""
第一次循环执行 yield L,输出【1】
第二次循环执行 yield L 之后的语句 L.append(0)后,L =【1,0】,再执行后面的语句 L = [L[i - 1] + L[i] for i in range(len(L))] 此时L =【1,1】(i=0时 L[- 1] + L[0]为1,i =1时 L[0] + L[1]为1)直到再次遇到yield L语句,输出【1,1】
第三次循环执行 yield L 之后的语句 L.append(0)后,L =【1,1,0】,再执行后面的语句 L = [L[i - 1] + L[i] for i in range(len(L))] 此时L =【1,2,1】(i=0时 L[- 1] + L[0]为1,i =1时 L[0] + L[1]为2,i=2时,L[1] + L[2]为1)直到再次遇到yield L语句,输出【1,2,1】
"""

def triangles(n):
L = [1]
while True:
yield L
L.append(0)
L = [L[ i - 1 ] + L[i] for i in range(len(L))]
if len(L) > n:
break
m = triangles(10)
for i in m:
print (i)
[[email protected] ~]# python triangle_v1.py
[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]
[[email protected]er01 ~]#

  

方法二:

[[email protected] ~]# cat triangle_v2.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:xieshengsen

"""
规律:
1、每行开始和结尾都是1
2、每行的数都是从两边都中间逐步变大(除第一、二行外)
3、从第三行开始,每个数都等于上方两个数之和
4、第n行有n个项
5、每行的数字之和为2的n-1次方(上期写的是n-2)
"""

def triangles(n):
L = [1]
while True:
yield L
L = [L[x]+L[x+1] for x in range(len(L)-1)]
L.insert(0,1)
L.append(1)
if len(L) > n:
break

a = triangles(10)
for i in a:
print (i)
[[email protected] ~]# python triangle_v2.py
[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]
[[email protected] ~]#

  

时间: 2024-10-02 00:22:44

使用脚本打印杨辉三角的相关文章

如何用C++打印杨辉三角

下面是杨辉三角的一部分,我们观察观察它有什么规律: 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,而且除边界外的每个数的值都

数组-02. 打印杨辉三角(20)

1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 int main(){ 5 int a[10][10]; 6 int i,j,n; 7 cin>>n; 8 for(i=0;i<n;++i){ 9 a[i][0]=1; 10 a[i][i]=1; 11 } 12 for(i=2;i<n;++i) 13 for(j=1;j<i;j++) 14 a[i][j]=a[i-1][

JavaScript打印杨辉三角

1.什么是杨辉三角? 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 上面就是一个简单的杨辉三角的例子 观察一下, 第n行有n个元素, 第n行的第一个元素和第n个元素为1, 其他元素,假设为第n行第m个元素,则其值为第n-1行第m-1个元素+第n-1行第m个元素. 2.附上代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>杨辉三角</

Java打印杨辉三角

/** * 打印杨辉三角 功能描述:使用多重循环打印6阶杨辉三角 * @author Administrator * */ public class sz_7 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("请输入行号:"); int m = in.nextInt(); int n = 2*m-1;//列元素数: int arr[][]

数组-02. 打印杨辉三角

1 /* 2 * Main.c 3 * E2-数组-02. 打印杨辉三角 4 * Created on: 2014年8月20日 5 * Author: Boomkeeper 6 ********测试通过***** 7 */ 8 9 #include <stdio.h> 10 11 int main(void){ 12 13 int pascalTriangle[10][10]; 14 int N;//题目中的N 15 16 scanf("%d",&N); 17 //

C语言打印杨辉三角(2种方法)

杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一.在高中的时候我们又知道,杨辉三角的任意一行都是的二项式系数,n为行数减1.也就是说任何一个数等于这个是高中的组合数.n代表行数减1,不代表列数减1.如:第五行的第三个数就为=6. 现在我们按第一种思路来写:先定义一个二维数组:a[N][N],略大于要打印的行数.再令两边的数为1,即当每行的第一个数和

打印杨辉三角 --JS

var arr = new Array(); for(var i = 0 ;i < 6 ; i++){ if(i == 0){arr.push(1);} else if(i == 1){arr = new Array();arr.push(1);arr.push(1);} else{ var arr2 = new Array(); arr2.push(1); for(var j = 0;j<arr.length - 1; j++){arr2.push(arr[j] + arr[j+1]);}

Python 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。

Python中使用for while循环打印杨辉三角练习(列表索引练习). 杨辉三角是一个由数字排列成的三角形数表,一般形式如下: 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组成的,而其余的数则是等于它肩上的两个数之和. 方法一: __author__ = 'Brad' n = int(input('请输入你想打印杨辉三角

Go语言:打印杨辉三角

杨辉三角的样式如下: 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,而其它元素等于它上方"肩膀"上的两个元素之和. 使用Go语言打印杨辉三角: package test import ( "fmt" ) //行数 const LINES int = 8 //杨辉三角 func ShowYangHuiTri