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

试题 基础练习 杨辉三角形

题目描述

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

你可能感兴趣的:(蓝桥杯,基本试题,蓝桥杯,Java编程语言,编程语言,算法,java,数据结构)