python杨辉三角二维数组_C语言编写杨辉三角(二维数组方法)

C语言实现杨辉三角(二维数组)

杨辉三角是什么

杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。(这里中国的老祖宗还是很厉害的)

实现效果

默认状态下不使用金字塔或者菱形输出,多半采用正三角形

题目分析

整体上看这是一个正三角行,行和列数是相等的;

继续会发现,第一列和对角线上的数字全为1。在二维数组中就可以用(i==0)和(i==j)来分别表示第一列和对角线,这是只要在这个条件下输出为1就可以;

深入研究图形后,我们会看到第i行第j列的数字是由第i-1行第j列的数字加上第i-1行第j-1列的数字构成的,在二位数组里面就是**假设数组名称是array,那么换成代码表示就是array[i][j]=a[i-1][j]+a[i-1][j-1],这个式子是二维数组解决杨辉三角的核心;

最后完成杨辉三角的构建后,我们还需要将其输出出来,也就是用循环嵌套输出二维数组(我相信这一步没有任何难度)。

代码实现

/* Note:Your choice is C IDE */

#include "stdio.h"

void main()

{

int a[100][100];

int i,j;

int n;

printf("请输入行数:");

scanf("%d",&n);

for(i=0;i

{

for(j=0;j<=i;j++)

{

if(j==0 || i==j)//在第一列或者在对角线上

{

a[i][j]=1;

}

else

{

a[i][j]=a[i-1][j]+a[i-1][j-1];

}

}

}

//输出杨辉三角

for(i=0;i

{

for(j=0;j<=i;j++)

{

printf("%d\t",a[i][j]);

}

printf("\n");

}

}

只有二维数组这一种方法吗?

当然不是,这是笔者喜欢使用的一种实现杨辉三角的方法,在这里给大家分享,但是杨辉三角还有另一种常见实现方式,那就是递归的方式。还可以用二维数组但不使用循环嵌套而使用递归的方法。总之,达到目的有很多种,但是一定要选择最适合自己的一种。

其他语言的实现方式

笔者阅读了其他多种语言的杨辉三角实现方法,包含了C++、Java、Python、C#、Bash,这里也给大家呈现一下:

C++

#include

#include

using namespace std;

int main()

{

const int n = 15;

const int m = 2 * n-1;

int arr[n + 1][m] = { 0 };

for (int i = 0; i < n; i++)

{

arr[i][n - i- 1] = 1;

arr[i][n + i -1] = 1;

}

for (int i = 2; i < n; i++)

{

for (int j = n - i + 1; j < n-2+i; j = j + 2)

arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j + 1];

}

int p;

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n - i - 1; j++)

cout << " ";

p = 1;

for (int j = n - i - 1; p < i + 2; j = j + 2)

{

cout << setw(4) << arr[i][j] << " ";

p = p + 1;

}

cout << endl;

}

return 0;

}

Java

public class TriangleArray

{

public static void main(String[] args)

{

final int NMAX = 10;

// allocate triangular array

int[][] odds = new int[NMAX + 1][];

for (int n = 0; n <= NMAX; n++)

odds[n] = new int[n + 1];

// fill triangular array

for (int n = 0; n < odds.length; n++)

for (int k = 0; k < odds[n].length; k++)

{

/*

* compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)

*/

int lotteryOdds = 1;

for (int i = 1; i <= k; i++)

lotteryOdds = lotteryOdds * (n - i + 1) / i;

odds[n][k] = lotteryOdds;

}

// print triangular array

for (int[] row : odds)

{

for (int odd : row)

System.out.printf("%4d", odd);

System.out.println();

}

}

}

C#

class Program

{

public int yanghui(int value)

{

if(value<3) return 1;

int[,]arry=new int[value,value];

Console.WriteLine("数组为:");

for(int i=0;i

{

string str="";

str=str.PadLeft(value-i);

Console.Write(str);

for(int j=0;j<=i;j++)

{

if(i==j||j==0)

arry[i,j]=1;

else

arry[i,j]=arry[i-1,j-1]+arry[i-1,j];

Console.Write(arry[i,j]+"");

}

Console.WriteLine();

}

}

static void Main(string[]args)

{

Program p=new Program();

Console.WriteLine("请输入数组值:");

if (p.yanghui(Convert.ToInt16(Console.ReadLine())))

Console.WriteLine("输入数值必须大于3");

Console.Readkey();

}

}

Python

# -*- coding: utf-8 -*-

#!/usr/bin/env python

def triangles():

L = [1]

while True:

yield L

L = [sum(i) for i in zip([0]+L, L+[0])]

该方式用到了列表生成式,理解起来较困难,下面是另一种方式:

def triangles():

ret = [1]

while True:

yield ret

for i in range(1, len(ret)):

ret[i] = pre[i] + pre[i - 1]

ret.append(1)

pre = ret[:]

PHP

$max = 10;

$L = [1];

var_dump($L);

$L = [1,1];

var_dump($L);

$n = 2;

while ($n <= $max - 1){

$oldL = $L;

$L[$n] = 1;

$n++;

for ($i = 1;$i

$L[$i] = $oldL[$i-1] + $oldL[$i];

}

var_dump($L);

}

?>

我们可以清晰的看到,Python语言是多种语言里最方便的代码量最少的,所以大家可以跟着我一起学习Python(同时笔者也在教授高中生Python),在学习Python的过程中,笔者会经常给大家更新和讲解一些经典案例,关注我吧!!

你可能感兴趣的:(python杨辉三角二维数组)