蓝桥杯练习 杨辉三角形
问题描述
杨辉三角形又称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];
//先判断一种特殊情况:n是否为1
if(n==1){
System.out.println(1);
return;
}
//当n大于1时
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];
}
}
//打印前n行,注意不要打印全部数组元素
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的用例就不会通过,这种失误就很不应该。总之,在蓝桥杯上,遇到简单题目,一定要仔细一点,争取简单题目不丢分。更不要觉得蓝桥杯题目全都很难。