欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

多种语言编写杨辉三角(数据结构二维数组方法)

程序员文章站 2022-03-03 20:28:13
Python语言实现杨辉三角杨辉三角是什么...

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

杨辉三角是什么

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

实现效果

多种语言编写杨辉三角(数据结构二维数组方法)
默认状态下不使用金字塔或者菱形输出,多半采用正三角形

题目分析

  1. 整体上看这是一个正三角行,行和列数是相等的;
  2. 继续会发现,第一列和对角线上的数字全为1。在二维数组中就可以用(i==0)和(i==j)来分别表示第一列和对角线,这是只要在这个条件下输出为1就可以;
  3. 深入研究图形后,我们会看到第i行第j列的数字是由第i-1行第j列的数字加上第i-1行第j-1列的数字构成的,在二位数组里面就是**假设数组名称是array,那么换成代码表示就是array[i][j]=a[i-1][j]+a[i-1][j-1],这个式子是二维数组解决杨辉三角的核心;
  4. 最后完成杨辉三角的构建后,我们还需要将其输出出来,也就是用循环嵌套输出二维数组(我相信这一步没有任何难度)。

代码实现

/* 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<n;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<n;i++)
    {
    	for(j=0;j<=i;j++)
    	{
    		printf("%d\t",a[i][j]);
    	}
    	printf("\n");
    }
    
} 

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

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

其他语言的实现方式

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

C++

#include<iostream>
#include<iomanip>
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<value;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

<?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 <count($oldL);$i++){
        $L[$i] = $oldL[$i-1] + $oldL[$i];
    }
    var_dump($L);
}
?> 

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

本文地址:https://blog.csdn.net/andaxi/article/details/108703193