问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
这道题的整体思路就是首先将框架搭建起来,我是首先声明了一个二维数组,之后再分别将该二维数组的第0列、对角线进行赋值为1,接着就是利用杨辉三角形的性质:三角形中的每个数字等于它两肩上的数字相加,往数组中添加数据即可。
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] numArray = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
if (i == j) {
numArray[i][j] = 1;
}
if (j == 0) {
numArray[k][j] = 1;
}
}
}
}
for (int i = 1; i < n; i++) {
for (int j = 1; j < n; j++) {
numArray[i][j] = numArray[i - 1][j - 1] + numArray[i - 1][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (numArray[i][j] != 0) {
System.out.print(numArray[i][j] + " ");
}
}
System.out.println();
}
}
}
首先这是没简化的代码,首先是利用了三层for循环进行1的赋值,接着就是利用性质完成赋值。
下面是简化代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[][] array = new int[num][num];
for (int i = 0; i < num; i++) {
// 定义每行的边
array[i][0] = 1;
array[i][i] = 1;
// 定义中间的值
for (int j = 1; j < i; j++) {
array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
}
}
// 遍历杨辉三角形
for (int i = 0; i < num; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
}
这里主要是把第一种方法中的两个for循环进行了融合,从而大大简化了代码。
加油!!!
奥利给!!!