蓝桥杯 基础练习 杨辉三角形 java
程序员文章站
2022-04-01 18:33:23
...
Basic6 基础练习 杨辉三角形
题目如下:
这道题其实是很经典的,身为基础题,讲道理是很好做的,但今天不知道为啥,磨叽了很久才写好
这道题的解法是这样的,这里运用了双数组来解决,array1就代表着当前那层的数,而array2就是通过当前层得到的下一层的数,因为数据也是一层层输出的,所以这样写比较好。
所以算法的核心就是两层循环,第一次循环代表着层数,就是从第一层到第n层,第二层循环就是输出当前层的数以及得到下一层数的一个过程。
坑点有两个,第一个就是array.length可不是你填的数的个数,而是你创建数组时给的长度,这点我竟然忘了,fuck。第二个就是对象的赋值了,我当时直接在第一层循环结束时,将下一层的数赋值给当前层(就是代表着当前层往下移动了)。这样两个变量就引用了同一个数组,所以下一次循环修改array2时也相当于修改了array1。所以最好就是把array2当作循环中的临时变量。当然也可以用数组拷贝的方式进行。
package basic;
import java.util.Scanner;
/**
* @Description: 基础练习 杨辉三角形
* @ClassName: Basic6
* @author: fan.yang
* @date: 2020/07/14 19:55
*/
public class Basic6 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] array1 = new int[40];
array1[0] = 0;array1[1] = 1;array1[2]=0;
for(int i = 0;i < n;i++){
int[] array2 = new int[40];
//坑1 不能直接用array.length
int length = i + 3;
for(int j = 1; j < length;j++){
array2[j] = array1[j] + array1[j - 1];
if(j != length - 1){
System.out.print(array1[j]);
if(j != length - 2){
System.out.print(" ");
}
}
}
System.out.println();
//坑2
array1 = array2;
//System.arraycopy(array2 , 1 , array1 , 1 , length - 1);
}
}
}