蓝桥杯刷题——day3

news2024/12/15 3:28:10

蓝桥杯刷题——day3

  • 题目一
    • 题干
    • 题目解析
    • 代码
  • 题目二
    • 题干
    • 题目解析
    • 代码

题目一

题干

每张票据有唯一的 ID 号,全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个 ID 断号,另外一个 ID 重号。你的任务是通过编程,找出断号的 ID 和重号的 ID。数据保证断号不可能发生在最大和最小号。
输入格式:
一个整数 N(N<100) 表示后面数据行数,接着读入N行数据,每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于10的5次方),每个整数代表一个 ID 号。
输出格式:
要求程序首先输入要求程序输出1 行,含两个整数m,n,用空格分隔,其中,m表示断号 ID,n表示重号 ID。
示例一:

输入:
2
5 6 8 11 9
10 12 9
输出:
7 9

示例二:

输入:
6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196
172 189 127 107 112 192 103 131 133 169 158
128 102 110 148 139 157 140 195 197
185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190
149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188
113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119
输出:
105 120

题目链接:错误票据

题目解析

这道题目挺有意思的,其实不难,输入部分我们就不过多介绍,我们可以创建一个Arraylist用作存储,没输入一个数字,就将数字存储到Arraylist中去,然后用排序,将Arraylist从小到大进行排序,从后往前遍历,当发现两个数字相等的时候则该数字就是重复的ID,当发现两个数字相差大于1的时候就发现该数字为丢失的数字。下面为完整代码:

代码

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 输入行数
        int line = scanner.nextInt();
        ArrayList<Integer> list = new ArrayList<>();

        // 读取所有 ID
        for (int i = 0; i < line; i++) {
            while (scanner.hasNextInt()) {
                list.add(scanner.nextInt());
            }
        }

        // 排序 ID
        Collections.sort(list);

        // 找出断号和重号
        int missing = 0, duplicate = 0;
        for (int i = 1; i < list.size(); i++) {
            if (list.get(i).equals(list.get(i - 1))) {
                duplicate = list.get(i); // 找到重号
            } else if (list.get(i) > list.get(i - 1) + 1) {
                missing = list.get(i - 1) + 1; // 找到断号
            }
        }

        // 输出结果
        System.out.println(missing + " " + duplicate);
    }
}

题目二

题干

小青蛙住在一条河边,它想到河对岸的学校去学习。小青蛙打算经过河里的石头跳到对岸。河里的石头排成了一条直线,小青蛙每次跳跃必须落在一块石头或者岸上。不过,每块石头有一个高度,每次小青蛙从一块石头起跳,这块石头的高度就会下降1,当石头的高度下降到0时小青蛙不能再跳到这块石头上(某次跳跃后使石头高度下降到0 是允许的)。小青蛙一共需要去学校上x 天课,所以它需要往返2x 次。当小青蛙具有一个跳跃能力y 时,它能跳不超过y 的距离。请问小青蛙的跳跃能力至少是多少才能用这些石头上完 x 次课。
输入格式:
输入的第一行包含两个整数n,x, 分别表示河的宽度和小青蛙需要去学校的天数。请注意2x 才是实际过河的次数。第二行包含n−1 个非负整数 表示在河中与 小青蛙的家相距i的地方有一块高度为h的石头,h=0则表示没有石头。
输出格式:
输出一行, 包含一个整数, 表示小青蛙需要的最低跳跃能力。
示例一:

输入:
5 1
1 0 1 0
输出:
4

题目链接:青蛙过河

题目解析

这是一个典型的二分查找加模拟的问题。小青蛙需要在有限的石头高度和跳跃能力的限制下完成往返 2x 次。以下是解决问题的详细思路:

  1. 最小跳跃能力y 的范围是从 1 到n,我们可以用二分查找找到最小的y,使得小青蛙能够完成2x 次过河。
  2. 给定一个跳跃能力y,模拟小青蛙的跳跃过程,检查是否能完成2x 次过河。然后每次跳跃时,石头高度减 1,不能跳到高度为 0 的石头上。
  3. 判断是否满足条件的方法用模拟实现。如果当前 y 能够完成2x 次过河,则尝试更小的 y;否则增加 y。

下面是完整代码:

代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 输入河宽度和需要去学校的天数
        int n = scanner.nextInt();
        int x = scanner.nextInt();

        // 输入石头高度
        int[] stones = new int[n];
        for (int i = 1; i < n; i++) {
            stones[i] = scanner.nextInt();
        }

        // 二分查找最低跳跃能力
        int left = 1, right = n, result = n;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (canCross(stones.clone(), mid, 2 * x)) {
                result = mid; // 当前跳跃能力可行,尝试更小值
                right = mid - 1;
            } else {
                left = mid + 1; // 当前跳跃能力不足,增加跳跃能力
            }
        }

        // 输出结果
        System.out.println(result);
    }

    // 判断是否能完成指定次数的过河
    public static boolean canCross(int[] stones, int jump, int trips) {
        int n = stones.length;

        for (int t = 0; t < trips; t++) {
            int position = 0; // 从起点出发
            while (position < n - 1) {
                int next = position;
                // 找到能跳到的最远位置
                for (int j = position + 1; j < n && j <= position + jump; j++) {
                    if (stones[j] > 0) {
                        next = j;
                    }
                }

                if (next == position) {
                    // 无法前进,跳跃失败
                    return false;
                }

                // 跳到 next,石头高度减 1
                stones[next]--;
                position = next;
            }
        }

        return true; // 成功完成所有 trips
    }
}

main函数其实很好理解就是一个二分查找的问题,我们看canCross函数,在这个函数模拟小青蛙从起点出发,经过石头跳到对岸的过程。外层循环 for (int t = 0; t < trips; t++)循环模拟小青蛙过河的过程。因为小青蛙需要往返2x 次,所以我们要模拟trips 次跳跃,while (position < n - 1)循环则检查小青蛙是否跳到了对岸,for (int j = position + 1; j < n && j <= position + jump; j++) 循环则是找小青蛙能跳到的最远距离,当我们发现next == position时,就表明小青蛙一动不动,也就是跳跃失败,否则石头的高度减去1,并且更新position。这段代码我并没有完全通过编译器,其出现的问题我也不太清楚,如果发现问题,欢迎私信和评论,感谢各位的点赞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2259697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「数据结构详解·十五」树状数组

「数据结构详解一」树的初步「数据结构详解二」二叉树的初步「数据结构详解三」栈「数据结构详解四」队列「数据结构详解五」链表「数据结构详解六」哈希表「数据结构详解七」并查集的初步「数据结构详解八」带权并查集 & 扩展域并查集「数据结构详解九」图的初步「数据结构…

【sgFileLink】自定义组件:基于el-link、el-icon标签构建文件超链接组件,支持垃圾桶删除、点击预览视频/音频/图片/PDF格式文件

sgFileLink源代码 <template><div :class"$options.name"><el-link click.stop"clickFile(data)"><img :src"getSrc(data)" /><span>{{ getFileNameAndSize(data) }}</span></el-link><el-linkcl…

电机驱动模块L9110S详解

电机驱动模块是一种用于控制和驱动电机的设备&#xff0c;它能够将控制信号转化为适合电机操作的电流和电压。通过电机驱动模块&#xff0c;可以实现对电机的速度、方向等参数进行精确控制。 今天我们要介绍的 L9110S 电机驱动适合大学生、工程师、个人DIY、电子爱好者们学习和…

Unity 获取鼠标点击位置物体贴图颜色

实现 Ray ray Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit)) {textureCoord hit.textureCoord;textureCoord.x * textureMat.width;textureCoord.y * textureMat.height;textureColor textureMat.GetPixel(Mathf.Flo…

openlayers+vite+vue3实现在地图上画线(四)

在前几期实现离线地图初始化以及规划某一特定区域、打点、出现弹窗的基础上&#xff0c;本文主要阐述如何实现在所规划的区域地图上画线&#xff0c;如果你实现了打点的效果&#xff0c;其实这个相对来说还是算比较简单的&#xff0c;因为和打点的代码大差不差。使用openlayers…

游戏引擎学习第45天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们刚刚开始研究运动方程&#xff0c;展示了如何处理当人物遇到障碍物时的情况。有一种版本是角色会从障碍物上反弹&#xff0c;而另一版本是角色会完全停下来。这种方式感觉不太自然&#xff0c;因为在游戏中&#xff0c;…

类与对象以及ES6的继承

认识class定义类 类的声明用的比较多 类与构造函数的异同 类的构造函数 类的实例方法 类的访问器方法 在类里面写拦截方法 类的静态方法 通过类名直接访问 es6类的继承-extends super关键字 子类可以重写父类方法包括父类的静态方法也可以继承父类的静态方法 babel可以将新的代…

通过IKE协商方式建立IPSec隧道

我们前面学习了H3C的IPsec VPN配置&#xff08;为什么IPsec两端内网的网段能不能重复&#xff1f;分明可以实现&#xff01;&#xff09;&#xff0c;学习了Juniper的IPsec VPN配置&#xff0c;学习了Windows的IPsec VPN配置&#xff08;配置Juniper虚墙vSRX基于策略的IPsec VP…

文献分享: EMVB——PLAID后期交互引擎的进一步优化

&#x1f449;前情提要&#xff1a; 神经网络自然语言模型概述 Transformer \text{Transformer} Transformer与注意力机制概述 &#x1f4da;相关论文&#xff1a; BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding \text{BERT: Pre-train…

vue2+element-ui实现多行行内表格编辑

效果图展示 当在表格中点击编辑按钮时:点击的行变成文本框且数据回显可以点击确定按钮修改数据或者取消修改回退数据: 具体实现步骤 1. 行数据定义编辑标记 行数据定义编辑标记 当在组件中获取到用于表格展示数据的方法中,针对每一行数据添加一个编辑标记 this.list.f…

介绍几个Linux下的杀毒软件

一&#xff1a;chkrootkit 是一个用于检测Linux系统下可能被攻击者植入的后门程序或恶意代码的扫描工具。 &#xff08;1&#xff09;安装方法&#xff08;ubuntu) sudo apt update sudo apt install chkrootkit &#xff08;2&#xff09;使用方法&#xff1a; chkrootkit -…

JS 中请求队列与锁的巧妙结合

一、引言 在 JavaScript 开发中&#xff0c;尤其是在涉及到异步操作和对共享资源的并发访问时&#xff0c;有效地控制请求顺序和资源访问权限至关重要。例如&#xff0c;在多个网络请求同时针对一个有限制访问频率的 API 或者多个异步任务竞争同一个文件写入权限的场景下&#…

MYSQL索引的分类和创建

目录 1、聚簇索引和非聚簇索引 tips&#xff1a; 小问题&#xff1a;主键为什么建议使用自增id? 2、普通索引 &#xff08;常规索引&#xff09;(normal) 3、唯一索引&#xff08;UNIQUE &#xff09; 唯一索引和主键的区别&#xff1a; 唯一约束和唯一索引的区别&#…

Oracle最佳实践-优化硬解析

前段时间参加oracle CAB&#xff0c;oracle高级服务部门做了一个数据库最佳实践的报告&#xff0c;其中就有一项就是解决未使用绑定变量但执行次数很多的SQL&#xff1b; 对于一个数据库来说如果不知道该如何优化&#xff0c;那么最简单最有效的优化就是减少硬解析&#xff0c;…

AI Agent:重塑业务流程自动化的未来力量(2/30)

《AI Agent&#xff1a;重塑业务流程自动化的未来力量》 摘要&#xff1a;整体思路是先介绍 AI Agent 的基本情况&#xff0c;再深入阐述其实现业务流程自动化的方法和在不同领域的应用&#xff0c;接着分析其价值和面临的挑战&#xff0c;最后得出结论&#xff0c;为读者全面…

哈默纳科Harmonic谐波减速机机器人精准高效动力传递的核心力量

在当今科技飞速发展的时代&#xff0c;机器人技术正以惊人的速度改变着我们的生产与生活方式。而在机器人的精密机械结构中&#xff0c;哈默纳科 Harmonic 谐波减速机扮演着不可或缺的角色&#xff0c;成为机器人精准高效动力传递的关键所在。 1.高精度与灵活性&#xff1a;哈默…

【开源项目】经典开源项目数字孪生体育馆—开源工程及源码

飞渡科技数字孪生体育馆管理平台&#xff0c;融合物联网IOT、BIM数据模型、三维GIS等技术&#xff0c;实现体育馆的全方位监控和实时全局掌握&#xff0c;同时&#xff0c;通过集成设备设施管理、人员管理等子系统&#xff0c;减少信息孤岛&#xff0c;让场馆“可视、可控、可管…

长短期记忆神经网络(LSTM)介绍

1、应用现状 长短期记忆神经网络&#xff08;LSTM&#xff09;是一种特殊的循环神经网络(RNN)。原始的RNN在训练中&#xff0c;随着训练时间的加长以及网络层数的增多&#xff0c;很容易出现梯度爆炸或者梯度消失的问题&#xff0c;导致无法处理较长序列数据&#xff0c;从而无…

SQL server学习03-创建和管理数据表

目录 一&#xff0c;SQL server的数据类型 1&#xff0c;基本数据类型 2&#xff0c;自定义数据类型 二&#xff0c;使用T-SQL创建表 1&#xff0c;数据完整性的分类 2&#xff0c;约束的类型 3&#xff0c;创建表时创建约束 4&#xff0c;任务 5&#xff0c;由任务编写…

正则表达式——参考视频B站《奇乐编程学院》

智能指针 一、背景&#x1f388;1.1. 模式匹配&#x1f388;1.2. 文本替换&#x1f388;1.3. 数据验证&#x1f388;1.4. 信息提取&#x1f388;1.5. 拆分字符串&#x1f388;1.6. 高级搜索功能 二、原料2.1 参考视频2.2 验证网址 三、用法3.1 限定符3.1.1 ?3.1.2 *3.1.3 3.1.…