蓝桥杯|蓝桥杯 试题 基础练习 杨辉三角形

试题 基础练习 杨辉三角形 题目描述

杨辉三角形又称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行业而言,计算机编程语言只是一个工具,我们主要学习的是数学,再由数学到数据结构与算法分析,这样才能很好的学习到新的知识。

    推荐阅读