Java实现杨辉三角

一、杨辉三角的简述

杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。在我国南宋数学家杨辉所著的《详解九章算术》(1261年)一书中用如图的三角形解释二项和的乘方规律。

二、那么我们如何运用java实现杨辉三角呢?我提供了两种方法

方法一:

我们观察杨辉三角的图可知杨辉三角的值是上一行的跟它相邻的元素之和,而当我们给第一行元素赋值1,就可以计算出杨辉三角的所有值。

import java.util.Scanner;

public class YHSJdemo1 {
    public static void main(String[] args){
        System.out.println("请输入杨辉三角的行数");
        Scanner scanner = new Scanner(System.in);
        int row =scanner.nextInt();
        int[][] arr = new int[row][row*2+1];
        arr[0][row] = 1;
        for(int i=1;i< arr.length;i++){
            for(int j=1;j<arr[i].length-1;j++){
                arr[i][j] = arr[i-1][j-1]+arr[i-1][j+1];
            }
        }
        for(int i=0;i< arr.length;i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if(arr[i][j]!=0) {
                    System.out.print(arr[i][j] + "\t");
                }else{
                    System.out.print("\t");
                }
            }
            System.out.println();//每遍历一层输入到下一行
        }
    }
}

先制表,给相应位置上赋值,未赋值的为int的默认值0

此时是

int[][] arr = new int[row][row*2];

 

导致无法给最后一行的最后一个元素赋值,所以需要再加一列

int[][] arr = new int[row][row*2+1];

则:

还需用制表符(\t)将其转换

方法二:

 如上图观察可知,杨辉三角的第一行的第一个元素和最后一个元素为1

在代码可理解为每一次行数循环结束后,第一列和最后一列的元素是1

import java.util.Scanner;

public class YHSJdemo3 {
    public static void main(String[] args) {
        System.out.println("请输入杨辉三角的行数");
        Scanner scanner = new Scanner(System.in);
        int row = scanner.nextInt();
        int arr[][] = new int[row][];
        //计算杨辉三角的值
        for(int i=0;i<arr.length;i++){//控制行数
            arr[i]=new int[i+1];//每一次循环后计算二维数组的列数的空间
            for(int j=0;j<arr[i].length;j++){//控制列数
                if(j==0||j==arr[i].length-1){//杨辉三角每行的第一个元素和最后一个元素是1
                    arr[i][j]=1;
                }else {
                    arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
                }
            }
        }
        //遍历输出
        for(int i=0;i<arr.length;i++){
            for (int j=0;j<arr[i].length;j++){
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值