十五届蓝桥杯省赛Java B组(持续更新..)

news2025/4/3 3:16:07

目录

  • 十五届蓝桥杯省赛Java B组
    • 第一题:报数
    • 第二题:类斐波那契数
    • 第三题:分布式队列
    • 第四题:食堂
    • 第五题:最优分组
    • 第六题:星际旅行
    • 第七题:LITS游戏
    • 第八题:拼十字

十五届蓝桥杯省赛Java B组

第一题:报数

在这里插入图片描述
📚

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        long result = 202420242024L / 2 * 24;
        //思想:奇数位都是20的倍数,偶数位都是24的倍数,可知202420242024的一半为奇数,第202420242024位除以2乘以24就能得到答案
        //举个例子:第4位是第2个24的倍数,第6位是第3个24的倍数......那第202420242024位就是第101210121012个24的倍数,
        //所以答案就是:202420242024 / 2 * 24
        System.out.println(result);
        scan.close();
    }
}

主要是找规律,硬解很难解出来。

第二题:类斐波那契数

在这里插入图片描述

因为是找最大,所以逆序遍历会快点,第一个符合条件的数就是答案。

我的暴力解法,比赛不会那只能放在一边让他跑了,按道理来说是能跑出来的。

package test;

import javax.swing.*;
import java.util.*;

public class Main {

    static int N = 10000000;
    static int[] a = new int[20];
    static long[] b = new long[N];

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

        for (int i = N; i >= 197; i--) {
            if(check(i)){
                System.out.println(i);
                break;
            }else {
                System.out.println(i);
            }
        }
    }

    // 检查是否是 类斐波那契 循环数
    static boolean check(int x) { // num是位数
        String str = x + "";
        int len = str.length();
        for (int i = 0; i < len; i++) {
            b[i + 1] = str.charAt(i) - '0';
        }
        for (int i = len + 1; b[i - 1] < x; i++) {
            b[i] = dfs(i);
//            System.out.println(" i:"+i);
//            System.out.println(b[i]);
            if( b[i] == x) return true;
            if( b[i] > x) return false;
        }
        return false;
    }

    // dfs递归
    static long dfs(int x){
        if(x == 1) return b[1];
        if(x == 2) return b[2];
        if(x == 3) return b[3];
        return dfs(x-1) + dfs(x - 2) + dfs(x - 3);
    }
}

📚法一

import java.util.*;

public class Main {
    static int N = 10000000;

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

        for (int i = N; i >= 197; i--) {
            if(check(i)){
                System.out.println(i);
                break;
            }
        }
    }

    static boolean check(int x){
        String str = x + "";
        // 获取位数
        int len = str.length();
        // 数组大小为len就够用了
        int[] dp = new int[len];
        // 将 x 每一位都拆出来
        for (int i = 0; i < len; i++) {
            dp[i] = str.charAt(i) - '0';
        }
        // 数组求和
        int sum = 0;
        for (int i = len; sum < x ; i++) {
            sum = Arrays.stream(dp).sum(); // 数组求和,注意语法
            dp[i % len] = sum; // 后面用不到的下标元素 进行替换
        }
        return sum == x;  // 两种结果:=x返回true,>x返回false
    }
}

每次求和其实只用到len个元素,所以可以对后续用不到的元素进行替换。

📚法二:


import java.util.*;

public class Main {

    static int N = 10000000;

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

        for (int i = N; i >= 197; i--) {
            if(check(i)){
                System.out.println(i); // 7913837
                break;
            }
        }
    }

    // 检查是否是 类斐波那契 循环数
    static boolean check(int x) { // num是位数
        String str = x + "";
        int len = str.length();
        int sum = 0;
        ArrayList<Integer> a = new ArrayList<>();
        for (int i = 0; i < len; i++) {
            int num = str.charAt(i) - '0';
            a.add(num);   // [1,9,7]
            sum += num;
        }
        //上面的这个循环究竟是在干什么事情:下面的这个以1234为例子说明,方便理解
        //列表 a 存储了整数 1234 的各个数位数字 [1, 2, 3, 4],
        // 变量 sum 的值为 10,即整数 1234 各个数位数字的总和。
        a.add(sum);
        // 此时变成了[1, 2, 3, 4,10]
        if(sum == x) return true;

        while(sum < x){
            //乘以2减去这个里面的第一个元素就是这个类斐波那契数列的规律,避免使用纯粹的数学方法计算
            sum = sum * 2 - a.get(0); 
            a.remove(0);
            a.add(sum);
            if(sum == x) return true;
        }
        return false;
    }
}

思想:要求第k+1位以后的数只需将k乘以2减去这个里面的第一个元素就是这个类斐波那契数列的规律,避免使用纯粹的数学方法计算。

第三题:分布式队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

👇写成这样有9个样例过不了,因为没有考虑副队列不超过主队列。

import java.util.*;

public class Main {

    static int N = 2010;
    static int INF = 100005;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        while(sc.hasNext()){
            String str = sc.next();
            if(str.equals("add")){
                int num = sc.nextInt();
                a[0] ++;
            }else if (str.equals("sync")){
                int num = sc.nextInt();
                a[num] ++;
            } else if (str.equals("query")) {
                int ans = INF;
                for (int i = 0; i < n; i++) {
                    ans = Math.min(ans,a[i]);
                }
                System.out.println(ans);
            }
        }
    }
}

📚分布式队列

第四题:食堂

在这里插入图片描述

import java.util.*;

public class Main {

    static int N = 2010;
    static int INF = 100005;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int q = sc.nextInt();
        while(q-->0) {
            int a2 = sc.nextInt();
            int a3 = sc.nextInt();
            int a4 = sc.nextInt();
            int b4 = sc.nextInt();
            int b6 = sc.nextInt();

            int sum = 0;
            // 满座 匹配4人寝坐4人桌
            while(a4 != 0 && b4 != 0){
                a4 --;b4 --;
                sum += 4;
            }
            // 满座 匹配2x2人寝坐4人桌
            while(a2 != 0 && b4 != 0){
                a2 = a2 - 2;b4 --;
                sum += 4;
            }
            // 满座 匹配2+4人寝坐6人桌
            while(a2 != 0 && a4 != 0 && b6 != 0){
                a2 --;a4 --;b6 --;
                sum += 6;
            }
            // 满座 匹配2x3人寝坐6人桌
            while(a3 != 0 && b6 != 0){
                a3 = a3 - 2;b6--;
                sum += 6;
            }
            // 满座 匹配3x2人寝坐6人桌
            while(a2 != 0 && b6 != 0){
                a2 = a2 - 3;b6 --;
                sum += 6;
            }
            // 空1座 匹配3人寝坐4人桌
            while(a3 != 0 && b4 != 0){
                a3--;b4--;
                sum += 3;
            }
            // 空1座 匹配3+2人寝坐6人桌
            while(a3 != 0 && a2 != 0 && b6 != 0){
                a3--;a2--;b6--;
                sum += 5;
            }
            // 空2座 匹配2人寝坐4人桌
            while(a2 != 0 && b4 != 0){
                a2--;b4--;
                sum += 2;
            }
            // 空2座 匹配4人寝坐6人桌
            while(a4 != 0 && b6 != 0){
                a4--;b6--;
                sum += 4;
            }
            // 空2座 匹配2x2人寝坐6人桌
            while(a2 != 0 && b6 != 0){
                a2 = a2 - 2;b6--;
                sum += 4;
            }
            // 空3座 匹配3人寝坐6人桌
            while(a3 != 0 && b6 != 0){
                a3--;b6--;
                sum += 3;
            }
            // 空4座 匹配2人寝坐6人桌
            while(a2 != 0 && b6 != 0){
                a2--;b6--;
                sum += 2;
            }
            System.out.println(sum);
        }
    }
}

☝️以上写法还有点小错误,b!=0是可以的,但是a不能写成a!=0。例如满座 匹配2x2人寝坐4人桌,要确保a2宿舍有两个,所以不能写成a2!=0,要写成a2 >= 2

📚

import java.util.*;

public class Main {

    static int N = 2010;
    static int INF = 100005;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int q = sc.nextInt();
        while(q-->0) {
            int a2 = sc.nextInt();
            int a3 = sc.nextInt();
            int a4 = sc.nextInt();
            int b4 = sc.nextInt();
            int b6 = sc.nextInt();

            int sum = 0;
            // 满座 匹配4人寝坐4人桌
            while(a4 >= 1 && b4 > 0){
                a4 --;b4 --;
                sum += 4;
            }
            // 满座 匹配2x2人寝坐4人桌
            while(a2 >= 2 && b4 > 0){
                a2 = a2 - 2;b4 --;
                sum += 4;
            }
            // 满座 匹配2+4人寝坐6人桌
            while(a2 >= 1 && a4 >= 1 && b6 > 0){
                a2 --;a4 --;b6 --;
                sum += 6;
            }
            // 满座 匹配2x3人寝坐6人桌
            while(a3 >= 2 && b6 > 0){
                a3 = a3 - 2;b6--;
                sum += 6;
            }
            // 满座 匹配3x2人寝坐6人桌
            while(a2 >= 3 && b6 > 0){
                a2 = a2 - 3;b6 --;
                sum += 6;
            }
            // 空1座 匹配3人寝坐4人桌
            while(a3 >= 1 && b4 > 0){
                a3--;b4--;
                sum += 3;
            }
            // 空1座 匹配3+2人寝坐6人桌
            while(a3 >= 1  && a2 >= 1 && b6 > 0){
                a3--;a2--;b6--;
                sum += 5;
            }
            // 空2座 匹配2人寝坐4人桌
            while(a2 >= 1 && b4 > 0){
                a2--;b4--;
                sum += 2;
            }
            // 空2座 匹配4人寝坐6人桌
            while(a4 >= 1 && b6 > 0){
                a4--;b6--;
                sum += 4;
            }
            // 空2座 匹配2x2人寝坐6人桌
            while(a2 >= 2 && b6 > 0){
                a2 = a2 - 2;b6--;
                sum += 4;
            }
            // 空3座 匹配3人寝坐6人桌
            while(a3 >= 1 && b6 > 0){
                a3--;b6--;
                sum += 3;
            }
            // 空4座 匹配2人寝坐6人桌
            while(a2 >= 1 && b6 > 0){
                a2--;b6--;
                sum += 2;
            }
            System.out.println(sum);
        }
    }
}

🍎
在这里插入图片描述
能想出来贪心策略就不难。想不出来可以试着骗分👇

if(sum1 > sum2){
	sout(sum2)
}else if(sum1 <= sum2){
	sout(sum1)
}

第五题:最优分组

在这里插入图片描述
📚最优分组

思路是:要求 使用试剂最少 情况下的分组策略k -> 最少试剂是x -> 对每组k个宠物消耗试剂的情况分类 -> 求出期望公式 -> 特殊情况 k=1

关键是要求出期望公式,这题就好做了。另外还要想到k=1这个特殊情况,进行特判。所以这题难度挺大的。

第六题:星际旅行

在这里插入图片描述
在这里插入图片描述

📚星际旅行

第七题:LITS游戏

第八题:拼十字

⭐️考点总结:

1.数学+1
2.暴力 构造 枚举 +1
3.模拟+1
4.贪心+1
5.数学 概率 期望 +1
6.Dijkstra 最短路问题 期望 +1
7.
8.

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

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

相关文章

蓝耘平台API深度剖析:如何高效实现AI应用联动

目录 一、蓝耘平台简介 1.1 蓝耘通义大模型 1.2 蓝耘云计算资源 1.3 蓝耘API与微服务 二、 蓝耘平台应用联动场景 2.1 数据采集与预处理联动 2.2 模型推理与后端服务联动 2.3 跨平台联动 三、蓝耘平台注册体验功能 3.1 注册 3.2 体验蓝耘MaaS平台如何使用海螺AI生成视频…

缓存 “三剑客”

缓存 “三剑客” 问题 如何保证 Redis 缓存和数据库的一致性&#xff1f; 1. 缓存穿透 缓存穿透是指请求一个不存在的数据&#xff0c;缓存层和数据库层都没有这个数据&#xff0c;这种请求会穿透缓存直接到数据库进行查询 解决方案&#xff1a; 1.1 缓存空值或特殊值 查一…

ComfyUi教程之阿里的万象2.1视频模型

ComfyUi教程之阿里的万象2.1视频模型 官网Wan 2.1 特点 一、本地安装1.1克隆仓库1.2 安装依赖&#xff08;1.3&#xff09;下载模型&#xff08;1.4&#xff09;CUDA和CUDNN 二、 使用体验&#xff08;2.1&#xff09;官方例子&#xff08;2.2&#xff09;执行过程&#xff08;…

Leetcode 寻找两个正序数组的中位数

&#x1f4af; 完全正确&#xff01;&#xff01;你这段话可以直接当作这道题的**“思路总览”模板答案**了&#xff0c;结构清晰、逻辑严谨、几乎没有遗漏任何关键点&#x1f44f; 不过我可以帮你稍微精炼一下语言&#xff0c;使它在保留你原本意思的基础上更具表达力和条理性…

C#测试Excel开源组件ExcelDataReader

使用微软的com组件Microsoft.office.Interop.Excel读写Excel文件虽然可用&#xff0c;但是列多、行多的时候速度很慢&#xff0c;之前测试过Sylvan.Data.Excel包的用法&#xff0c;如果只是读取Excel文件内容的话&#xff0c;还可以使用ExcelDataReader包&#xff0c;后者是C#开…

手机零售行业的 AI 破局与创新降本实践 | OceanBase DB大咖说

OceanBase《DB 大咖说》第 20 期&#xff0c;我们邀请了九机与九讯云的技术总负责人&#xff0c;李远军&#xff0c;为我们分享手机零售企业如何借力分布式数据库OceanBase&#xff0c;赋能 AI 场景&#xff0c;并通过简化架构实现成本管控上的突破与创新。 李远军于2016年加入…

SpringBoot整合LogStash,LogStash采集服务器日志

LogStash 1. 下载 版本支持兼容表https://www.elastic.co/cn/support/matrix 版本: 7.16.x 的最后一个版本 https://www.elastic.co/downloads/past-releases/logstash-7-16-3 需要提前安装好jdk1.8和ES, 此处不在演示 2. 安装 tar -xvf logstash-7.16.3-linux-x86_64.tar.gz…

目前市场上,好用的校招系统是哪个?

在数字化浪潮的推动下&#xff0c;校园招聘已从传统的“海投简历线下宣讲”模式全面转向智能化、数据化。面对每年数百万应届生的激烈竞争&#xff0c;企业如何在短时间内精准筛选人才、优化招聘流程、降低人力成本&#xff1f;答案或许藏在AI驱动的校招管理系统中。而在这场技…

SharpBrowser:用C#打造超快的个性化开源浏览器!

推荐一个基于.Net 8 和 CefSharp开发的开源浏览器。 01 项目简介 SharpBrowser 是一个用 C# 和 CefSharp 开发的全功能网页浏览器。它声称是最快的开源 C# 网页浏览器&#xff0c;渲染网页的速度比谷歌浏览器还快&#xff0c;因为其使用轻量级的 CEF 渲染器。 经过比较所有可…

【新模型速递】PAI一键云上零门槛部署DeepSeek-V3-0324、Qwen2.5-VL-32B

DeepSeek近期推出了“DeepSeek-V3-0324”版本&#xff0c;据测试在数学推理和前端开发方面的表现已优于 Claude 3.5 和 Claude 3.7 Sonnet。 阿里也推出了多模态大模型Qwen2.5-VL的新版本--“Qwen2.5-VL-32B-Instruct”&#xff0c;32B参数量实现72B级性能&#xff0c;通杀图文…

【Elasticsearch基础】基本核心概念介绍

Elasticsearch作为当前最流行的分布式搜索和分析引擎&#xff0c;其强大的功能背后是一套精心设计的核心概念体系。本文将深入解析Elasticsearch的五大核心概念&#xff0c;帮助开发者构建坚实的技术基础&#xff0c;并为高效使用ES提供理论支撑。 1 索引&#xff08;Index&…

Github 热点项目 awesome-mcp-servers MCP 服务器合集,3分钟实现AI模型自由操控万物!

【今日推荐】超强AI工具库"awesome-mcp-servers"星数破万&#xff01; ① 百宝箱式服务模块&#xff1a;AI能直接操作浏览器、读文件、连数据库&#xff0c;比如让AI助手自动整理Excel表格&#xff0c;三分钟搞定全天报表&#xff1b; ② 跨领域实战利器&#xff1a;…

SpringMVC 拦截器(Interceptor)

一.拦截器 假设有这么一个场景&#xff0c;一个系统需要用户登录才能进入&#xff0c;在检验完用户的信息后对页面进行了跳转。但是如果我们直接输入跳转的url&#xff0c;可以绕过用户信息校验&#xff08;用户登录&#xff09;&#xff0c;直接进入系统。 因此我们引入了使…

03-SpringBoot3入门-配置文件(自定义配置及读取)

1、自定义配置 # 自定义配置 zbj:user:username: rootpassword: 123456# 自定义集合gfs:- a- b- c2、读取 1&#xff09;User类 package com.sgu.pojo;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.spring…

【蓝桥杯每日一题】3.28

&#x1f3dd;️专栏&#xff1a; 【蓝桥杯备篇】 &#x1f305;主页&#xff1a; f狐o狸x "今天熬的夜&#xff0c;会变成明天奖状的闪光点&#xff01;" 目录 一、唯一的雪花 题目链接 题目描述 解题思路 解题代码 二、逛画展 题目链接 题目描述 解题思路 解题代…

万字长文详解Text-to-SQL

什么是Text-to-SQL 在各个企业数据量暴涨的现在&#xff0c;Text-to-SQL越来越重要了&#xff0c;所以今天就来聊聊Text-to-SQL。 Text-to-SQL是一种将自然语言查询转换为数据库查询的技术。它可以让用户通过自然语言来查询数据库&#xff0c;而不需要编写复杂的SQL语句。 T…

【Linux】动静态库的制作与使用

一.对软硬链接的补充 1、无法对目录进行硬链接 为什么呢&#xff1f; 首先&#xff0c;我们在访问文件时&#xff0c;每一个文件都会有自己的dentry结构&#xff0c;这些结构会在内存中维护一棵路径树&#xff0c;来快速进行路径查找。但是如果某个节点直接使用硬链接到了根节…

ubuntu22.04 如何安装 ch341 驱动

前言 本篇是介绍ubuntu22.04如何安装 ch341 驱动&#xff0c;并对其中遇到的问题进行整理。 一、流程 1.1 查看CH340驱动 首先是查看ubuntu22.04系统自带的驱动&#xff0c;用以下命令即可 ls /lib/modules/$(uname -r)/kernel/drivers/usb/serial 然后会跳出以下界面&…

个人博客网站从搭建到上线教程

步骤1:设计个人网站 设计个人博客网站的风格样式,可以在各个模板网站上多浏览浏览,以便有更多设计网站风格样式的经验。 设计个人博客网站的内容,你希望你的网站包含哪些内容如你的个人基本信息介绍、你想分享的项目、你想分享的技术文档等等。 步骤2:选择开发技术栈 因…

mac m4 Homebrew安装MySQL 8.0

1.使用Homebrew安装MySQL8 在终端中输入以下命令来安装MySQL8&#xff1a; brew install mysql8.0 安装完成后&#xff0c;您可以通过以下命令来验证MySQL是否已成功安装&#xff1a; 2.配置mysql环境变量 find / -name mysql 2>/dev/null #找到mysql的安装位置 cd /op…