第十二届蓝桥杯JavaB组省赛H_杨辉三角形

一、题目:
在这里插入图片描述
二、题目分析:

首先这个题是我们比较熟悉的杨辉三角,需要注意的就是评测用例的范围。

三、解法

.
题目给出20%的用例是1-10 所以可以直接 枚举出1-10的即可获得2分

.
下面我第一次的解法,思路就是依次算出数值,直到找到目标值,由于太复杂,最后得了4分:

import java.util.ArrayList;
import java.util.Scanner;

public class H_杨辉三角形 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();

        if (x == 1) {
            System.out.println(1);
            return;
        }
        
        ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        ArrayList<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(1);
        list.add(list1);
        
        int count = 3;

        for (int i = 2; ; i++) {

            ArrayList<Integer> temp = new ArrayList<>();

            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i) {
                    temp.add(1);
                    count++;
                    continue;
                }
                if (list.get(i - 2).get(j - 1) + list.get(i - 2).get(j) == x) {
                    System.out.println(count + 1);
                    return;
                } else {
                    temp.add(list.get(i - 2).get(j - 1) + list.get(i - 2).get(j));
                    count++;
                }
            }
            list.add(temp);
        }
    }
}

.满分解法:
在这里插入图片描述

第二列 永远递增
第三列 是前n项的和 1=1、 3=1+2 、6=1+2+3
所以当第三列值最先搜索到目标值
计算得 第三列累加,用公式(1+n)*n/2>10亿,得n>=44721 可行
然后,第一第二行为0,所以n要大于等于44723

那么,当第三个值已经大于10亿了,我们在44723行之内还没找到目标值的话,那么就说明,目标值只能在第二行内出现了,这时可直接用公式计算出目标值的位置。

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        long n = scan.nextLong();//输入值,查找
        long[] arr = new long[44725];
        arr[0] = 1;
        long k = 1L;//k来定义位置
        if (n == 1) {
            System.out.println(1);
            return;
        }
        
        //依次更新数组的值 在一个数组上更新 从后往前更新 减少内存使用
        for (int i = 1; i < 44725; i++) {
            for (int j = i; j >= 1; j--) {
                arr[j] += arr[j - 1];//换行后,用自己进行运算,减少内存
                if (arr[j] == n) {
                    System.out.println(k + i - j + 1);
                    return;//如果找到了就结束
                }
            }
            //记录元素个数
            k += (i + 1);
        }


        //如果没找到 就说明是在第二行 直接求出位置
        System.out.println(((1 + n) * n / 2) + 2);
        
    }
}


<think>好的,我现在需要帮助用户了解蓝桥杯Java B的相关信息,包括历年真题、解题思路和比规则。首先,我要确认用户的需求是什么。用户可能正在准备参加蓝桥杯,想通过历年真题来练习,并了解解题思路和比规则以便更好地备考。 接下来,我需要收集相关信息。根据用户提供的引用内容,引用[1]提到了2023年的真题及解析,用户可能在解题时遇到了困难,特别是动态规划相关的题目。引用[2]提到了运行限制,比如Java的最大运行时间是2秒,内存256MB,这属于比规则的一部分。引用[3]展示了一个解法片段,可能涉及数操作,这可以帮助用户了解解题思路。 然后,我需要将这些信息整理成结构清晰的回答。首先介绍比的基本情况,包括别设置和考察内容。然后分点说明比规则,特别是时间、内存限制和注意事项。接下来是历年真题和解题思路,这里需要结合引用中的例子,比如动态规划题目“数切分”,并给出具体的解题步骤和示例代码。最后,提供备考建议,帮助用户高效准备。 同时,根据系统指令,需要生成相关问题。我需要考虑用户可能还想知道什么,比如如何获取真题资源、如何优化代码性能、常见题型有哪些等。这些问题应该覆盖用户潜在的需求,帮助他们进一步探索。 在回答过程中,要确保使用正确的中文表达,数学公式用$...$或$$...$$格式。例如,在讲解动态规划时,如果有涉及数学公式,需要正确应用LaTeX语法。同时,引用标注要自然,例如在提到动态规划的例子时,添加引用标识[^1]。 最后,检查回答是否符合所有系统指令,确保没有遗漏任何要求,比如使用中文、正确格式的LaTeX、生成相关问题等。确保回答真实可靠,结构清晰,帮助用户逐步解决问题。</think>### 蓝桥杯 Java B信息整理 #### **1. 比基本情况** - **别设置**:蓝桥杯分为A/B/CJava B主要面向非985/211院校本科生,考察编程能力与算法设计[^2]。 - **题型分布**:包含填空题、编程题,近年编程题占比增加,侧重动态规划、数据结构、数学建模等。 #### **2. 比规则** - **时间与内存限制**: - **Java**:最大运行时间2秒,内存256MB[^2]。 - **Python/C/C++**:时间更短(如Python为3.3秒),需注意代码效率优化。 - **提交要求**: - 答案首位不可为0(例如填空题输出数值时需注意格式)[^2]。 - 编程题需通过标准输入输出,禁止文件操作。 #### **3. 历年真题与解题思路** ##### **典型题型与示例** 1. **动态规划** **例题**:2023年“数切分”问题(要求将数分割为满足特定条件的子数) **解题步骤**: - 定义状态:$dp[i]$表示前$i$个元素的合法切分方案数。 - 状态转移:若子数$[j+1, i]$满足条件,则$dp[i] += dp[j]$。 - 边界条件:$dp[0] = 1$(空数视为一种方案)。 ```java // 伪代码示例 int[] dp = new int[n+1]; dp[0] = 1; for (int i = 1; i <= n; i++) { for (int j = 0; j < i; j++) { if (isValidSubarray(j+1, i)) { dp[i] += dp[j]; } } } ``` 2. **贪心与数学建模** **例题**:2022年“最优操作次数”问题(通过特定操作使数有序)。 **关键点**:分析操作性质,发现规律,例如通过逆序对数量推导最小操作次数。 3. **数据结构应用** **例题**:2021年“路径计数”问题(使用图论或并查集优化查询)[^3]。 **技巧**:将条件转化为图结构,用DFS/BFS或并查集快速判断连通性。 ##### **真题资源获取** - 官网:蓝桥杯官网提供部分历年真题。 - 社区:优快云、GitHub等平台有选手分享题解(注意代码正确性验证)。 #### **4. 备考建议** 1. **算法专项训练**: - 高频考点:动态规划、搜索(DFS/BFS)、字符串处理。 - 推荐刷题平台:LeetCode、AcWing(按标签分类练习)。 2. **代码效率优化**: - 减少冗余计算(如预处理、记忆化)。 - 避免使用高复杂度API(如Java的`ArrayList`频繁增删)。 3. **模拟考试**: - 使用历年真题限时训练,适应比节奏。 --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值