打印杨辉三角并对齐输出

来源:互联网 发布:天翼阅读软件 编辑:程序博客网 时间:2024/05/19 00:53
public class Demo {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入杨辉三角层数:");// 行数int row = Integer.parseInt(br.readLine());// 创建二维数组int[][] arr = new int[row][row];// 指定杨辉三角中竖变和斜边的值赋予1for (int i = 0; i < arr.length; i++) {arr[i][0] = 1;arr[i][i] = 1;}// 确定除1以外的数for (int i = 2; i < arr.length; i++) {for (int j = 1; j < i; j++) {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 <= i; j++) {System.out.print(arr[i][j]+ "\t");}System.out.println();}}}


此格式并不是等腰三角格式,需要优化

思路:根据最大数的位数确定空格数-->相邻两数的最高位之间的距离相等-->数字位数增大几位,空格就减少几位

public class Demo {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入杨辉三角层数:");// 行数int row = Integer.parseInt(br.readLine());// 创建二维数组int[][] arr = new int[row][row];// 指定杨辉三角中竖变和斜边的值赋予1for (int i = 0; i < row; i++) {arr[i][0] = 1;arr[i][i] = 1;}// 确定除1以外的数for (int i = 2; i < row; i++) {for (int j = 1; j < i; j++) {arr[i][j] = arr[i-1][j-1] + arr[i-1][j];}}// 打印二维数组String maxNumLengthSpace = "";String maxNum = String.valueOf(arr[row-1][row/2]);;// 根据最大数字的长度,确定空格的大小for (int m = 0; m < maxNum.length(); m++){maxNumLengthSpace += " "; }for (int i = 0; i < row; i++) {// 打印杨辉三角左边的空格for (int j = 0; j < row-1-i; j++) System.out.print(maxNumLengthSpace + " ");// 打印杨辉三角数字间的空格for (int j = 0; j <= i; j++) {String moreNumLengthSpace = "";// 得到当前数字String num = String.valueOf(arr[i][j]);// 根据相邻两数长度的差值确定空格数,数字长度越长,空格数越少(因为相邻两数的最高位之间的距离相等)for (int a = 0; a <= (maxNum.length() - num.length()); a++) {moreNumLengthSpace += " ";}System.out.print(arr[i][j] + maxNumLengthSpace + moreNumLengthSpace + " ");}System.out.println();}}}





0 0