Java算法---杨辉三角的打印输出

/*
*1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
输入描述:
输入数据包含多组测试数据。 每组测试数据的输入只有一个正整数n(1≤n≤128),表示将要输出的杨辉三角的层数。 输入以0结束
 
输出描述:
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
*
/
/*这道题需要注意以下几点: 1、这道题主要还是对大数据的处理,和斐波那契数列有点像,给的测试用例都比较大,用基本的int,long之类的根本就不行,long型的最多到68,就超了,题目给的要是1≤n≤128,所以这个题主要是看如何操作这种比较大的数值。Java里面提供了一个很强大的BigInteger,这个类可以处理任意大的数字,里面有好多方法,可以查查JDK多了解一下关于这个类的用法,可以解决好多比较大的数字的问题。 2、然后就是这个题的思想,仔细观察,可以发现这样一个规律,rs[i][j]=rs[i-1][j]+rs[i-1][j-1]);我们可以利用这个规律在一个二维矩阵中动态打表,最后输出这个二维矩阵中不为零的数字即可。 3、输出格式的问题:题目中让每行数字之间用空格隔开,那么我们需要注意在每一行的最后一个数字后面是不能加空格的,由于空格我们看不见,所以打印出来看上去和答案一样,但是会报错,就是因为多了一个空格,我举个例子,比如我用“*”代替空格,便于观察,如下输出: 1* 1*1* 1*2*1* 1*3*3*1* 如果将“*”换成“ ”感觉和题目的输出一样, 其实是每行末尾多了一个空格,所以这个要注意。 */ 下面我贴上自己的代码: import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) {  Scanner sc=new Scanner(System.in);  while(sc.hasNext()){  int n=sc.nextInt();  if(n==0){   break;  }  BigInteger [][] rs=new BigInteger[n][n];  for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) {        rs[i][j] = new BigInteger("0");       }     }  for (int i = 0; i < rs.length; i++) {   rs[i][0]=new BigInteger("1");  }  for (int i = 1; i < rs.length; i++) {   for (int j = 1; j < i+1; j++) {    rs[i][j]=rs[i-1][j].add(rs[i-1][j-1]);   }  }  StringBuffer sb=new StringBuffer();  for (int i = 0; i < rs.length; i++) {   for (int j = 0; j < i+1; j++) {     sb.append(rs[i][j]+"*");   }   System.out.println(sb.substring(0, sb.length()));   sb.replace(0, sb.length(), "");  }  System.out.println();  } } }

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/csdn_yaobo/article/details/50052021
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞