import java.util.Scanner;
/**
* 题目:打印出n行杨辉三角形(要求打印出效果如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
* @author vhviqd
*/
public class Homework33 {
public static void main(String[] args) {
/**
* 思路:可以用二维数组:既a[i][j]={{1},{1,1},{1,2,1},{1,3,3,1}......},然后使用两层for循环,外层控制打印的行数,
* 内部for循环进行判断每一行的收尾及中间部分,并打印每一行。随着行数的增加,每一行前面的缩进从
* 第n行到第一行逐渐增加,第一行为n-1个缩进空格,所以缩进循环要放在两个for循环中间以控制每行的缩进
*@--------我在做这个题的时候是:先利用二维数组不管其格式,先输出正确结果,然后在反复考虑每行缩进的问题,
* 最初先是放在了内部for循环内,结果运行后结果不对,经过debug调试后才发现不能应该放在第一个for和第二个for之 * 间。第一次发博客,也是刚刚起步学习java,就当给自己做个笔记。同时也希望看到的朋友多多指教,互相学习。
*/
Scanner in = new Scanner(System.in);
System.out.println("请输入您要打印的杨辉三角行数:");
int n = in.nextInt();
int[][] arr = new int[n][n];
/*
* 利用外层for控制行,内行控制每行的长度。判断当行等于列的时候即arr[n][n] = 1;还有arr[n][1] = 1;
*/
for (int i = 0; i < arr.length; i++) {
//打印缩进空格,每一行只打印前面的
int m ;
for(m=n-1;m>0;m--) {
System.out.print(" ");//4个空格调节每一行前面的空格数
}
n--;
//每一行的数的个数等于行数
for (int j = 0; j <= i; j++) {
//判断每一行的收尾位置
if (i == j || j == 0) {
arr[i][j] = 1;
} else {
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
//打印每一行数组
System.out.print(arr[i][j]+" ");//6个空格调节数字间距离
}
//换行
System.out.println();
}
}
}
运行结果如下: