杨辉三角详解

杨辉三角是我国古代一个重要的数学成就 。

如上图,杨辉三角是一个满足以下条件的几何排列:

1. 每个数等于它上方两数之和。
2. 每行数字左右对称,由1开始逐渐变大。
第 n 行的数字有 n 项。

请编写一个程序,按题目要求输出杨辉三角中第 n 行第 m 个数字。

输入

第一行,两个数字 n 和 m ,表示需要输出的数字在杨辉三角上的位置,行列均从 1 开始,(1<=n,m<=10000),以空格分隔。

输出

仅包含一个整数,即杨辉三角中第 n 行第 m 列处的数字。

输入示例

7 5

输出示例

15

算法原理:

杨辉三角是一组数字排列的三角形. 它的排列情况有两个特点:

(1). 三角形两侧数值均为1: 即 " 三角形的第一行为1 " 以及 " 无论哪一行它的第一列和最后一列都为1 "

这里可以把这种规律记成n=m(即在一行), m=1(列为1时).

(2). 除第一种情况外, 其他位置的数值是其正上方与左上角数值之和

某数值正上方的那个数坐标为(n-1, m)

某数值左上角的那个数坐标为(n-1, m-1)

 

由以上分析可写出代码.

 

代码详解:

import java.util.Scanner;

public class YangHuiTriangle {
    public static int YangHuiTriangle(int n, int m){
        /*
        根据杨辉三角, 可发现返回1有两种情况
          1.当n==m, 即在第一行,返回1
          2.无论在哪一行, 该行的第一列和最后一列都是1,即m为1时,返回1
        这两种情况满足其一即可返回1
        */
        if(n==m||m==1){
            return 1;
        }else{
            //这个数等于它上方两数之和
            //这个数上方两个数的坐标分别是(n-1,m-1)和(n-1,m)
            return YangHuiTriangle(n-1, m-1)+YangHuiTriangle(n-1, m);
        }
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in); //标准输入
        while(sc.hasNext()){
            //在控制台输入"指定行n和指定列m",回车即可得第n行第m列的数
            int n = sc.nextInt();
            int m = sc.nextInt();
            System.out.println(YangHuiTriangle(n, m));//标准输出
        }
    }
}

输出测试:

 

 

 

 

 

 


版权声明:本文为asdx1020原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。