//
//输入指定的行数,打印杨辉三角
//
//每个数等于它上方两数之和。
//每行数字左右对称,由1开始逐渐变大。
//第n行的数字有n项。
//
//
//
//可从打印菱形的思想出发:?????
// 存在问题: 随着行数的增加,数字增大,占用空间增大,慢慢变得不“对称”。
package com.day16;
import java.util.Scanner;
public class testYangHuiSanJiao{
public static Scanner Sc =new Scanner(System.in);
//初始化行数组,是每一行数组第一元素为1;
public static int[][] inital(int [][] ary){
for( int i=0;i<=ary.length-1;++i){
ary [i] = new int [i+1]; //每行元素个数本等于行数i,
//但注意到 数组是从 0 开始的,故行数组初始化为[i+1]的大小
ary[i][0]=1;//首元素初始化为1;
ary[i][i]=1; //末元素初始化为1;
}
int row,colum;
for(row = 2;row <= ary.length-1;row++){ //前两行初始化已完成,从第三行开始
for(colum = 1;colum < row;colum++){ //每一行数组第一个元素(下标为0)已初始化为1,
//从第二个元素(下标为1)开始
//末元素已初始化为1,故column < row ;
ary[row][colum]=ary[row-1][colum-1]+ary[row-1][colum];
}
}
// //Check row ary[][]
//
// for(int i = 0; i<=ary.length-1;i++){
// for(int j = 0; j<=i;j++){ //初始化大小决定 j<=i
// System.out.print(ary[i][j]+" ");
// }
// System.out.println();
//
// }
// //测试通过,初始化正确;
return ary;
}
public static void prtyhsj (int [][] ary){
int cbkn= ary.length-0 ;
for(int row = 0;row <= ary.length-1;row++){
//每行首先打印相应的空格;
for(int i = cbkn ; i > 0;i--){
System.out.print(" ");
}
//在打印相应行数组的元素+空格;
for(int col = 0;col <= row; col++){
System.out.print(ary[row][col]);
System.out.print(" ");
}
//打印后续对称连续空格
for(int i = cbkn;i > 0;i--){
System.out.print(" ");
}
cbkn--;
System.out.println();//一行打印结束执行换行
}
}
public static void main (String [] args){
System.out.println("Please input row:");
int rownum = Sc.nextInt();
System.out.println("Printing "+rownum+" row YHSJ");
//定义二维数组,第一维为行数组,并初始化
int [][] rowary = new int [rownum][] ;
inital(rowary);
prtyhsj(rowary);
}
}