蓝桥杯练习 杨辉三角形
问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。
思路分析:打印杨辉三角,可以构造一个二维数组,二维数组中的元素遵循杨辉三角的规律赋值,最后打印出来即可。
规律:
第一行和第二行是1和1 1的这两行没有计算的,只有第三行中的2是由1+1得来。
递推公式是(用数组的下标表示):第三行[1] = 第二行[1-1]+第二行[1];即当前元素的上面元素和上面元素的前一位元素。
那么再观察一下,从第三行开始,每一行除了第一个元素和最后一个元素是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[][] arr = new int[n][n];
if(n==1){
System.out.println(1);
return;
}
arr[0][0] = 1;
arr[1][0] = 1;
arr[1][1] = 1;
for (int i = 2; i < n; i++) {
arr[i][0] = 1;
arr[i][i] = 1;
for (int j = 1; j < i; j++) {
arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
总结一下:这道题目是2021年蓝桥杯的真题,JAVA,phython,C都有这道题目。其实蓝桥杯也有基础题的,这道题其实有一个坑,我之前忘记判断特殊情况了,没写n=1的情况,那么n=1的用例就不会通过,这种失误就很不应该。总之,在蓝桥杯上,遇到简单题目,一定要仔细一点,争取简单题目不丢分。更不要觉得蓝桥杯题目全都很难。