java 杨辉三角(贾宪三角,帕斯卡三角)

背景:

杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合  

 

代码实现过程:

 1.首先定义变量行数 int len = 10;
 2.初始化二维数组存放数据
        int [][] arr = new int[len][];

        for (int i = 0; i < len; i++) {
            arr[i] = new int[i+1];
        }

 

 3.将数据存储到数组
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if(j==0||j==arr[i].length-1){
                    arr[i][j] = 1;
                }else {
                    arr[i][j] = arr[i-1][j-1]+ arr[i-1][j];
                }
            }
        }
4.打印数组
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }

此时就已经打印出杨辉三角了,但打印出的三角不符合我们所见到的格式:

---------杨辉三角(贾宪三角,帕斯卡三角)-----------
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   

对打印格式进行修改

5.首先获取半三角的最大数据 int maxNumber = arr[arr.length-1][(arr.length)/2];
6.判断这个数据为几位数,记录在count中
        int count = 0;
        while (maxNumber>1){
            maxNumber /= 10;
            count++;
        }
7.格式化输出:按照标准样式输出
        for (int i = 0; i < arr.length; i++) {
//            每行前面的空格
            System.out.format("%"+((arr.length-i)*count)+"s","");
            for (int j = 0; j < arr[i].length; j++) {
//                数据间的空隙
                System.out.format("%-"+count+"d",arr[i][j]);
                System.out.format("%-"+count+"s","");
            }
            System.out.println();
        }

打印结果:

 完整代码:

System.out.println("---------杨辉三角(贾宪三角,帕斯卡三角)-----------");
//        首先定义变量行数
        int len = 10;
//        初始化二维数组存放数据
        int [][] arr = new int[len][];
        for (int i = 0; i < len; i++) {
            arr[i] = new int[i+1];
        }
//        将数据存储到数组
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if(j==0||j==arr[i].length-1){
                    arr[i][j] = 1;
                }else {
                    arr[i][j] = arr[i-1][j-1]+ arr[i-1][j];
                }
            }
        }
//        打印数组
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
//        按照格式打印
//            首先获取半三角的最大数据
        int maxNumber = arr[arr.length-1][(arr.length)/2];
//            判断这个数据为几位数
        int count = 0;
        while (maxNumber>1){
            maxNumber /= 10;
            count++;
        }
//        格式化输出
        for (int i = 0; i < arr.length; i++) {
//            每行前面的空格
            System.out.format("%"+((arr.length-i)*count)+"s","");
            for (int j = 0; j < arr[i].length; j++) {
//                数据间的空隙
                System.out.format("%-"+count+"d",arr[i][j]);
                System.out.format("%-"+count+"s","");
            }
            System.out.println();
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值