实现思路:我们可以先把杨辉三角想象成一个空的二维数组,然后再给它赋值输出即可。
关键在于如何赋值:仔细观察上图可以得出除了每一行第一个数以及最后一个数(都是1),
中间的数字规律就是:a[ i ][ j ] = a[ i - 1 ][ j - 1 ] + a[ i - 1 ][ j ]
实现代码:
public class Triangle {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//输入数字控制杨辉三角的层数int layer = scanner.nextInt();//利用二维数组的结构实现(容易赋值)int[][] triangle = new int[layer][layer];//外层循环控制行的赋值for (int i = 0; i < triangle.length; i++) {//当i=0,j按照步长为1往后赋值(每一行数字的个数等于行数,所以循环次数就是i)for (int j = 0; j <= i; j++) {//每行第一个数跟最后一个数都是1if (j == 0 || i == j){triangle[i][j] = 1;}else {//杨辉三角的规律triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];}//赋值完就输出System.out.print(triangle[i][j] + " ");}//保证换行System.out.println();}}
}
相信大家更多的是看到以下的杨辉三角:
其实个只是改变了输出格式而已,核心代码还是上面部分的代码。为了更好的理解,我们先实现下面的*输出(先拆开写,再合并)。
*******
******
*****
****
***
**
*
拆开:
for (int i = 0; i < 7; i++) {System.out.print("*");}System.out.println();for (int i = 0; i < 6; i++) {System.out.print("*");}System.out.println();for (int i = 0; i < 5; i++) {System.out.print("*");}System.out.println();for (int i = 0; i < 4; i++) {System.out.print("*");}System.out.println();for (int i = 0; i < 3; i++) {System.out.print("*");}System.out.println();for (int i = 0; i < 2; i++) {System.out.print("*");}System.out.println();for (int i = 0; i < 1; i++) {System.out.print("*");}
合并:
for (int i = 0; i < 7; i++) {for (int j = 0; j < 7 - i; j++) {System.out.print("*");}System.out.println();}
到这里其实我们已经差不多实现等腰的杨辉三角了,我们最后把*换成空格就ok了。
public class Triangle {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//输入数字控制杨辉三角的层数int layer = scanner.nextInt();//利用二维数组的结构实现(容易赋值)int[][] triangle = new int[layer][layer];//外层循环控制行的赋值for (int i = 0; i < triangle.length; i++) {//当i=0,j按照步长为1往后赋值(每一行数字的个数等于行数,所以循环次数就是i)for (int j = 0; j <= i; j++) {//每行第一个数跟最后一个数都是1if (j == 0 || i == j){triangle[i][j] = 1;}else {//杨辉三角的规律triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];}}}for (int i = 0; i < triangle.length; i++){for (int j = 0; j < triangle.length - i; j++) {//*替换成" "System.out.print(" ");}//替换的同时输出杨辉三角for (int k = 0; k <= i; k++) {System.out.print(triangle[i][k] + " ");}//保证换行System.out.println();}}
}