美文网首页
2017年Java方向C组第五题

2017年Java方向C组第五题

作者: D丝学编程 | 来源:发表于2021-03-18 09:54 被阅读0次

标题: 杨辉三角

杨辉三角也叫帕斯卡三角,在很多数量关系中可以看到,十分重要。

第0行:           1
第1行:          1 1
第2行:         1 2 1
第3行:        1 3 3 1
第4行:       1 4 6 4 1
....

两边的元素都是1, 中间的元素是左上角的元素与右上角的元素和。

我们约定,行号,列号都从0计数。
所以: 第6行的第2个元素是15,第3个元素是20

直观地看,需要开辟一个二维数组,其实一维数组也可以胜任。
如下程序就是用一维数组“腾挪”的解法。

public class A
{
    // 杨辉三角形的第row行第col列
    static long f(int row, int col){
        if(row<2) return 1;
        if(col==0) return 1;
        if(col==row) return 1;
        
        long[] a = new long[row+1];
        a[0]=1;
        a[1]=1;
        
        int p = 2;
        
        while(p<=row){
            a[p] = 1;
            for( __________________ ) a[q] = a[q] + a[q-1];
            p++;
        }
        
        return a[col];
    }
    
    public static void main(String[] args){
        System.out.println(f(6,2));
        System.out.println(f(6,3));     
    }
}

请仔细分析源码,并完成划线部分缺少的代码。
注意:只提交缺少的代码,不要提交已有的代码和符号。也不要提交说明性文字。

解析:

/*
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
 * */
// 杨辉三角形的第row行第col列
static long f(int row, int col){
    if(row<2) return 1;    //第一行和第二行全部为1
    if(col==0) return 1;   //第一列全部为1
    if(col==row) return 1;  //每行最后一列全部为1
    //以上3行代码符合的情况直接返回       
    long[] a = new long[row+1];   //定义数组存储当前行元素,元素个数=row+1
    //初始化第二行的状态,第二行2个数字都是1
    a[0]=1;    //此处a[0]=1,不但初始化第二行状态,也为后面每个循环行的第一个元素赋值1
    a[1]=1;  
    //p=2,使用p计数进行循环,意味着从第三行开始循环
    int p = 2;   //行数,在下面从第三行开始循环
    //循环行,从第三行开始循环,分别用数组记录第三行结果,
    //第四行结果由第三行结果得到
    //第五行结果由第四行结果得到
    //以此类推.......
    while(p<=row)   
    {
        a[p] = 1;  //每行的最后一个元素=1
        //当前行的数据=while上次循环行的同一列,和上一列的和
        for(int q=p-1;q>=1;q-- ) a[q] = a[q] + a[q-1];
        p++;
    }
    return a[col];
}

public static void main(String[] args){
    System.out.println(f(6,2));
    System.out.println(f(6,3)); 
}

相关文章

  • 2015年Java方向C组第五题

    标题:格子中输出 stringInGrid方法会在一个指定大小的格子中打印指定的字符串。 要求字符串在水平、垂直两...

  • 2016年Java方向C组第五题

    分小组 9名运动员参加比赛,需要分3组进行预赛。有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I下面...

  • 2018年Java方向C组第五题

    标题:书号验证 2004年起,国际ISBN中心出版了《13位国际标准书号指南》。原有10位书号前加978作为商品分...

  • 2017年Java方向C组第五题

    标题: 杨辉三角 杨辉三角也叫帕斯卡三角,在很多数量关系中可以看到,十分重要。 两边的元素都是1, 中间的元素是左...

  • 9、正则表达式

    注:第0组(d(a(b))(c))第1组 d(a(b))(c)第2组 a(b)第3组 b 一、正则表达式的概述和简...

  • 浅谈学好java需要熟练掌握的知识

    个人是从C++方向转到JAVA方向的新手,个人认为学号JAVA需要从以下方面入手,学好下面那些知识,JAVA基本可...

  • 2014年Java方向C组第八题

    标题:兰顿蚂蚁 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上...

  • 2014年Java方向C组第九题

    标题:地宫取宝 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 ...

  • 2015年Java方向C组第二题

    第二题 标题:立方尾不变 有些数字的立方的末尾正好是该数字本身。比如:1,4,5,6,9,24,25,.... 请...

  • 2015年Java方向C组第三题

    第三题 标题:无穷分数 无穷的分数,有时会趋向于固定的数字。 请计算【图1.jpg】所示的无穷分数,要求四舍五入,...

网友评论

      本文标题:2017年Java方向C组第五题

      本文链接:https://www.haomeiwen.com/subject/jhtrxltx.html