杨辉三角是我国古代一个重要的数学成就 。
如上图,杨辉三角是一个满足以下条件的几何排列:
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));//标准输出
}
}
}
输出测试: