欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

蓝桥杯 基础练习 杨辉三角形 java

程序员文章站 2022-04-01 18:33:23
...

Basic6 基础练习 杨辉三角形

题目如下:

蓝桥杯 基础练习 杨辉三角形 java

这道题其实是很经典的,身为基础题,讲道理是很好做的,但今天不知道为啥,磨叽了很久才写好

这道题的解法是这样的,这里运用了双数组来解决,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);
        }
    }

}

相关标签: 蓝桥杯 算法