试题 基础练习 杨辉三角形 题目描述
杨辉三角形又称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。
基础练习 ?? 二维数组的应用注意
??注意每一行的间隔以及它上一行的相邻的两个数之间的和,也就是上一行的递推运算。它的第i行j列就是它上一行的i-1行,j-1列的值和它上一行的i-1行,j列上的值之和。代码如下
直角的杨辉三角
import java.util.Scanner;
public class YangHuiTriangle {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
//键盘随机输入一个十进制整数
int[][] array = new int[n][n];
//构建一个二维数组
for(int i = 0;
i < array.length;
i++){//控制杨辉三角形的行数
for(int j = 0;
j <= i;
j++){//控制杨辉三角形的列数
if(j == 0 || j == i){
//将杨辉三角形的第i行0列以及第i行j列(这里的直角杨辉三角形是关于第i行j列对称)
array[i][j] = 1;
}
else{
//计算第i行第j列的数,也就是该数的上方相邻的两个数之和
array[i][j] = array[i-1][j-1] + array[i-1][j];
}
//输入三角形的每一行
System.out.print(array[i][j] + " ");
}
System.out.println();
//换行
}
}
}
等腰的杨辉三角形
import java.util.Scanner;
/**
* 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
* 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
* 下面给出了杨辉三角形的前4行:
*
*1
*1 1
*1 2 1
* 1 3 3 1
*
* 给出n,输出它的前n行。
* @author Lenovo
*
*/
public class YangHuiTriangle {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
//键盘随机输入一个十进制整数
int[][] array = new int[n][n];
//构建一个二维数组
for(int i = 0;
i < array.length;
i++){//控制杨辉三角形的行数
for(int j = 0;
j <= i;
j++){//控制杨辉三角形的列数
if(j == 0 || j == i){
array[i][j] = 1;
//将杨辉三角形的第i行0列以及第i行j列(这里的直角杨辉三角形是关于第i行j列对称)
}
else{
array[i][j] = array[i-1][j-1] + array[i-1][j];
}
//System.out.print(array[i][j] + " ");
}
//System.out.println();
}
//等腰输出处理
for(int i = 0;
i < array.length;
i++){
int m = array.length - i;
//打印对应的空格,也就是等腰三角形腰前面对应的空格
for(int j = 0;
j <= m;
j++){//打印相邻的空格
System.out.print(" ");
}
for(int k = 0;
k <= i;
k++){//上述进行等腰处理后,输出杨辉三角形
System.out.print(array[i][k] + " ");
//输出想对应的二维数组值
}
System.out.println();
//输完后换行处理
}
}
}
??这种解法,不能用于解决蓝桥杯上的杨辉三角形,系统上默认的是直角型的杨辉三角形,顾此种解法只适合大家课后学习,探讨的新知识,新的解法,顾此方法供大家开启思维的大门,希望读者能够想到,也希望我的解法能够帮到你学习到一题多解的思想。本题的核心思想
??第一:了解并且熟悉杨辉三角形的数学原理,杨辉三角,是二项式系数在三角形中的一种几何排列,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。
??第二:第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
??第三: 每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。
??第四:斜线上数字的和等于其向左(从左上方到右下方的斜线)或向右拐弯(从右上方到左下方的斜线),拐角上的数字。1+1=2,1+1+1=3,1+1+1+1=4,1+2=3,1+2+3=6,1+2+3+4=10,1+3=4,1+3+6=10,1+4=5。
??第五:解决的算法是,上一行递推计算,也有其他运用和组合的对应关系而使用阶乘计算的,然而这种CPU处理的速度较慢且阶乘容易溢出,所以我们采用上一行的递推运算。
??第六:使用二维数组,for循环嵌套使用,以及空格的输出,等腰三角形是如何实现的。学习的建议
熟悉使用java的一些基本的编程思想
于IT行业而言,计算机编程语言只是一个工具,我们主要学习的是数学,再由数学到数据结构与算法分析,这样才能很好的学习到新的知识。
推荐阅读
- leetcode|LeetCode 5955. 摘水果 题目解析
- java|蓝桥杯 试题 算法训练 无聊的逗
- Python算法|Python算法学习: 蓝桥杯官方练习系统VIP题库真题代码讲解(持续更新)
- 历年真题|2018CCPC桂林站 G. Greatest Common Divisor (gcd 差分 质因数分解)
- 算法|2020年10月份蓝桥杯省赛B组C++题解
- #|kuangbin线段树专题
- Codeforces|Codeforces940F Machine Learning (带修莫队)
- Codeforces|Codeforces126B Password (KMP)
- 蓝桥杯|2019蓝桥杯省赛C++A组真题解析