十五届蓝桥杯JAVA B组题目详解(持续更新中)

news2024/12/24 11:31:02

试题 B: 类斐波那契循环数

 我发现蓝桥杯的题目现在就是要费时间去理解,所以还是审题很重要,这道题的思路就是,一个n位数的前n个数,都是对应的位数上的值,比如说12345,五位数是吧,那数列S的前五位数就是{1,2,3,4,5},后面的数的值就是不断的从该位置上的前n位数进行相加就可以得到对应的数据,我们的算法思路就是,直接暴力,这个数据也不大,循环10^7 *,计算机一两秒就能直接算出来,我们只需要不断获取这个范围的数值上的位数,累计相加和为sum,再判断在对应的数列s中是否存在sum与对应的N相等的数值就可以了,过程仔细一些就行了,难度不大。


public class Main {
    static int END = 10000000;
    public static void main(String[] args) {
        int MaxNumber = 0;
        for(int i = 1; i <= END; i ++) {  // 由1开始
            int number =i;
            String numberAsString =String.valueOf(number);
            int Length =numberAsString.length();
            int Array[] = new int[Length];
            NumbertoArray(Array, i);
            int k = 0;
            while(true) {
                //这里我们不断向前推进一位数,然后进行length长度的相加
                Array[k] = ListNumberSum(Array);
                // 要么是类斐波那契循环数要么不是,直接更新k
                //准备下一个循环
                if(Array[k] == i || Array[k] > i) break;
                k = (k + 1) % Length;
            }
            if(Array[k] == i) {  // 是的话更新MaxNumber
                if(MaxNumber <= i) {
                    MaxNumber = i;
                }
            }
        }
        System.out.println(MaxNumber);//运行结果7913837
    }

    public static void NumbertoArray(int array[], int number) {
        for(int i = array.length - 1; i >= 0; i --) {
            array[i] = number % 10;
            number = number / 10;
        }
    }
    public static int ListNumberSum(int array[]) {
        int sum = 0;
        for(int i = 0; i < array.length; i ++) sum = sum + array[i];
        return sum;
    }
}

试题 C: 分布式队列

题目描述

小蓝最近学习了一种神奇的队列:分布式队列。简单来说,分布式队列包含 N 个节点(编号为 0 至 N − 1,其中 0 号为主节点),其中只有一个主节点,其余为副节点。主/副节点中都各自维护着一个队列,当往分布式队列中添加元素时都是由主节点完成的(每次都会添加元素到队列尾部);副节点只负责同步主节点中的队列。可以认为主/副节点中的队列是一个长度无限的一维数组,下标为 0, 1, 2, 3 . . . ,同时副节点中的元素的同步顺序和主节点中的元素添加顺序保持一致。

由于副本的同步速度各异,因此为了保障数据的一致性,元素添加到主节点后,需要同步到所有的副节点后,才具有可见性。

给出一个分布式队列的运行状态,所有的操作都按输入顺序执行。你需要回答在某个时刻,队列中有多少个元素具有可见性。

输入格式 

第一行包含一个整数 N,表示节点个数。接下来包含多行输入,每一行包含一个操作,操作类型共有以下三种:add、sync 和 query,各自的输入格式如下:

1. add element:表示这是一个添加操作,将元素 element 添加到队列中;

2. sync follower_id:表示这是一个同步操作,follower_id 号副节点会从主节点中同步下一个自己缺失的元素;

3. query:查询操作,询问当前分布式队列中有多少个元素具有可见性。

输出格式

对于每一个 query 操作,输出一行,包含一个整数表示答案。

样例输入 

3
add 1
add 2
query
add 1
sync 1
sync 1
sync 2
query
sync 1
query
sync 2
sync 2
sync 1
query

样例输出 

0
1
1
3

【样例说明】

执行到第一个 query 时,队列内容如下:

0:[1,2]
1:[]
2:[]
两个副节点中都无元素,因此答案为 0。
执行到第二个 query 时,队列内容如下:
0:[1,2,1]

1:[1,2]

2:[1]

执行到第三个 query 时,队列内容如下:0:[1,2,1]1:[1,2,1]2:[1]

只有下标为 0 的元素被所有节点同步,因此答案为 1。

执行到第四个 query 时,队列内容如下:0:[1,2,1]1:[1,2,1]2:[1,2,1]

三个元素都被所有节点同步,因此答案为 3。

【评测用例规模与约定】

对于 30% 的评测用例:1 ≤ 输入的操作数 ≤ 100。

对于 100% 的评测用例:1 ≤ 输入的操作数 ≤ 2000,1 ≤ N ≤ 10,1 ≤follower_id < N,0 ≤ element ≤ 105。

这套题罗里吧嗦一大堆,不仔细看真的容易审题不清晰,而且很容易被误导,这道题难就难在题目理解上,这道题我们其实可以不用管副节点, 而且主节点添加了什么元素,以及副节点添加了什么元素,是否与主节点相等,你全都不用管,你只要在意主节点要添加元素的时候,你就往里面添加就好了,这个题目的意思就是,副节点会自动填充,我们不需要管,那这就好办了,我们只需要每次在显现元素的时候,找到所有队列中元素最少的就好了。


import java.io.PrintWriter;
import java.util.*;
public class Main {
  final static PrintWriter out=new PrintWriter(System.out);
  public static void main(String[] agrs) {
	  Scanner sc =new Scanner(System.in);
	  int n =sc.nextInt();
	  long vi[] =new long[n];//vi[0]为主队列,1到(n-1)为副队列
	  while(sc.hasNext()) {
		  String op =sc.next();
		  if(op.equals("add")) {
			  int i =sc.nextInt();
			  
			  vi[0]++;//增加主队列元素总数
		  }else if(op.equals("add")) {
			  int i =sc.nextInt();
			  vi[i]=vi[0]<vi[i]+1?vi[i]:vi[i]+1;//同步副队列i中的个数
		  }else if(op.equals("query")) {
			  out.println(find(vi));
		  }
	  }
	  out.flush();
	  out.close();
  }
private static char[] find(long[] arr) {
	// TODO Auto-generated method stub
	long min =0x3f3f3f3f;
	for(int i =0;i<arr.length;i++) {
		min =Math.min(min, arr[i]);
	}
}
return min;
	

}

试题 D: 食堂

题目描述

S 学校里一共有 a2 个两人寝、a3 个三人寝,a4 个四人寝,而食堂里有 b4个四人桌和 b6 个六人桌。学校想要安排学生们在食堂用餐,并且满足每个寝室里的同学都在同一桌就坐,请问这个食堂最多同时满足多少同学用餐?

输入格式

采用多组数据输入。

输入共 q + 1 行。

第一行为一个正整数 q 表示数据组数。

后面 q 行,每行五个非负整数 a2,a3,a4,b4,b6 表示一组数据。

输出格式

输出共 q 行,每行一个整数表示对应输入数据的答案。

样例输入

2
3 0 1 0 1
0 2 2 1 1

样例输出

6
10

提示

【样例说明】

对于第一组数据,只有一个六人桌,因此最多安排三个两人寝的同学就餐,答案为 (2 + 2 + 2) = 6。

对于第二组数据,用一个六人桌安排两个三人寝的同学,用一个四人桌安排一个四人寝的同学,答案为 (3 + 3) + (4) = 10。

【评测用例规模与约定】

对于 20% 的评测用例,保证 a2 + a3 + a4 ≤ 8。对于 100% 的评测用例,保证 q ≤ 100,b4 + b6 ≤ a2 + a3 + a4 ≤ 100。

 这道题我们需要使用到贪心算法+分类讨论,要仔细一些,对各种情况进行讨论。

优先使用六人桌:因为六人桌可以容纳更多的学生,我们应该首先尝试用六人桌来安排学生。

安排三人寝和两人寝:如果有三人寝,我们可以用一张六人桌来安排两个三人寝,或者安排三个两人寝。

试题 E: 最优分组

这道题没什么好说的了,这个跟高中的那种概率题很像,纯数学的题目,把公式列出来就出结果了。

期望值就是E(X)=N/K+(1-(1-P)^K)*N

来解释一下这个公式,这道题是混合检验,我们分成了N/K组,那么每一组都要用一次试剂,那么这个数量是固定的,如果我们检查到了有阳性,那么会被检测到阳的组数是(1-(1-P)^K)*N/K,这个组每一个都要被检查一次,那么要再乘以K,所以就为(1-(1-P)^K)*N。


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
      Scanner sc =new Scanner(System.in);
      int N =sc.nextInt();
      double p =sc.nextInt();
      double MinHope =N;
      int bestK =1;
      for(int k =1;k<=N;k++){
          if (N%k==0){
              double GetHope =N*(1-Math.pow(1-p,k)+N/k)+N/k;
              if (GetHope<MinHope){
                  MinHope=GetHope;
                  bestK =k;
              }
          }
      }
      System.out.println(bestK);

  }
}

试题 F:星际旅行 

这道题的话,下面的解题思路就是,借助Dilkstra的思想,首先就是先设置一个流程去判断不同星球之间的连接情况,边权设置为1,map用来存储某个星球和其他星球的连接状态,最后借助这个map去计算期望值,这道题还是有点难实现代码的,注意审题。

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.PriorityQueue;

public class Main {
   static BufferedReader in =new BufferedReader(new InputStreamReader(System.in));//用于读取输入
    static PrintWriter out =new PrintWriter(new OutputStreamWriter(System.out));//用于输出结果

    public static void main(String[] args) throws IOException {
        String[] s =in.readLine().split("\\s");//读取一行数据,
        int n =Integer.parseInt(s[0]);//星球数量
        int m =Integer.parseInt(s[1]);//连接数
        int q =Integer.parseInt(s[2]);//查询次数

        //优先队列用于Dijkstra算法,存储星球以及到达星球的最短距离
        PriorityQueue<long[]> pq =new PriorityQueue<>((o1, o2) ->Long.compare(o1[1],o2[1]));

        //数组列表数组,用于存储星球之间的连接关系和距离
        List<int[]>[] lists =new ArrayList[n+1];
        for (int i =1;i<=n;i++){
            lists[i]=new ArrayList<>();
        }
        //二维数组,存储星球之间的距离,初始值设为Long.MAX_VALUE
        long[][] map =new long[n+1][n+1];
        for (long[] v:map) Arrays.fill(v,Long.MAX_VALUE);

        //读取连接关系,将连接关系存储在list数组中
        int a,b;
        for (int i =0;i<m;i++){
            s=in.readLine().split("\\s");
            a =Integer.parseInt(s[0]);
            b= Integer.parseInt(s[1]);
            lists[a].add(new int[]{b,1});
            lists[b].add(new int[]{a,1});//注意是双向连接
        }
        //使用Dijkstra算法计算每个星球到达其他星球的最短距离并存储在map数组中
        for(int i =1;i<=n;i++){
            //先将顶点到自身距离设置为0
            map[i][i]=0l;
            pq.add(new long[]{i,0l});
            while (!pq.isEmpty()){
                //移出一个具有最小距离的顶点
                long[] v =pq.poll();
                for (int[]x :lists[(int) v[0]]){//遍历与节点v[0]项链的所有节点x
                    if (v[1]+x[1]<map[i][x[0]]) {
                        map[i][x[0]] = v[1] + x[1];
                        pq.add(new long[]{x[0], map[i][x[0]]});
                    }
                }
            }
        }
        //统计查询结果
        long sum =0l;
        for(int k =0;k<q;k++){
            s=in.readLine().split("\\s");
            a=Integer.parseInt(s[0]);
            b=Integer.parseInt(s[1]);
            for (int i =1;i<=n;i++){
                if (map[a][i]<b){
                    sum++;
                }
            }
            //计算平均可以到达星球数量,并输出结果
            out.printf("%.2f",1.0*sum/q);
            out.flush();
        }
    }
}

  试题 E:LITS 游戏

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

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

相关文章

自主巡航,目标射击

中国机器人及人工智能大赛 参赛经验&#xff1a; 自主巡航赛道 【机器人和人工智能——自主巡航赛项】动手实践篇-CSDN博客 主要逻辑代码 #!/usr/bin/env python #coding: utf-8import rospy from geometry_msgs.msg import Point import threading import actionlib impor…

数据结构(Java):七大排序算法【多方法、多优化、多细节】

目录 1、排序的概念 1.1 排序 1.2 排序的稳定性 1.3 内部排序&外部排序 1.4 各排序算法总结对比 2、 插入排序 2.1 &#x1f338;直接插入排序 2.2 &#x1f338;希尔排序 3、 选择排序 3.1 &#x1f338;直接选择排序 3.2 直接选择排序优化 3.3 &#x1f338;…

【PyTorch】图像多分类项目

【PyTorch】图像二分类项目 【PyTorch】图像二分类项目-部署 【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 多类图像分类的目标是为一组固定类别中的图像分配标签。 目录 加载和处理数据 搭建模型 定义损失函数 定义优化器 训练和迁移学习 用随机权重进行训…

HC-SR04超声波测距模块使用方法和例程(STM32快速移植)

基于STM32和HC-SR04模块实现超声波测距功能 HC-SR04硬件概述HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器&#xff0c;将电信号转换为40 KHz超声波脉冲。接收器监听发射的脉冲。如果接收到它们&#xff0c;它将产生一个输出脉冲&#xff0c;其宽度可用于…

磁盘作业1

新添加一块硬盘&#xff0c;大小为5g&#xff0c;给这块硬盘分一个mbr格式的主分区&#xff08;大小为3g&#xff09;&#xff0c;给此主分区创建ext2的文件系统&#xff0c;挂载到/guazai1目录&#xff0c;并写入文件内容为 "this is fist disk" 文件名为1.txt的文件…

五分钟学会 Docker Registry 搭建私有镜像仓库

在上一篇文章《前端不懂 Docker &#xff1f;先用它换掉常规的 Vue 项目部署方式》中&#xff0c;我们学习了如何使用 aliyun 私有镜像仓库&#xff0c;也了解到可以使用 Docker Registry 搭建私有镜像仓库。这篇文章就分享下实操过程。 registry 是官方提供的 registry 镜像&…

【数据结构--查找】

目录 一、查找&#xff08;Searching&#xff09;的概念1.1、基本概念1.2、算法的评价指标 二、顺序查找2.1、算法思想2.2、算法实现2.2.1、常规顺序查找2.2.2、带哨兵的顺序查找 2.3、效率分析2.4、优化2.4.1、针对有序表2.4.2、被查效率不相等 三、折半查找3.1、算法思想3.2、…

<数据集>学生课堂行为识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;13899张 标注数量(xml文件个数)&#xff1a;13899 标注数量(txt文件个数)&#xff1a;13899 标注类别数&#xff1a;8 标注类别名称&#xff1a;[js, tt, dk, zt, dx, zl, jz, xt] # 举手 js # 抬头听课 …

新版GPT-4omini上线!快!真TM快!

大半夜&#xff0c;OpenAI突然推出了GPT-4o mini版本。 当我看到这条消息时&#xff0c;正准备去睡觉。mini版本质上是GPT-4o模型的精简版本&#xff0c;没有什么革命性的创新&#xff0c;因此我并没有太在意。 结果今天早上一觉醒来发现伴随GPT-4o mini上线&#xff0c;官网和…

Vue3+ element plus 前后分离admin项目安装教程

前后分离admin项目安装 前后分离admin项目安装基于 vue3.x CompositionAPI typescript vite element plus vue-router-next pinia&#xff0c;适配手机、平板、pc 的后台开源免费模板&#xff0c;希望减少工作量&#xff0c;帮助大家实现快速开发。 下载源码 前往gite…

Flink SQL 实时读取 kafka 数据写入 Clickhouse —— 日志处理(三)

文章目录 前言Clickhouse 表设计adlp_log_local 本地表adlp_log 分布式表 Flink SQL 说明创建 Source Table (Kafka) 连接器表创建 Sink Table (Clickhouse) 连接器解析 Message 写入 Sink 日志查询演示总结 前言 在之前的文章中&#xff0c;我们总结了如何在 Django 项目中进…

甄选范文“论系统安全架构设计及其应用”,软考高级论文,系统架构设计师论文

论文真题 随着社会信息化进程的加快,计算机及网络已经被各行各业广泛应用,信息安全问题也变得愈来愈重要。它具有机密性、完整性、可用性、可控性和不可抵赖性等特征。信息系统的安全保障是以风险和策略为基础,在信息系统的整个生命周期中提供包括技术、管理、人员和工程过…

Noah-MP陆面生态水文模拟与多源遥感数据同化技术

了解陆表过程的主要研究内容以及陆面模型在生态水文研究中的地位和作用&#xff1b;熟悉模型的发展历程&#xff0c;常见模型及各自特点&#xff1b;理解Noah-MP模型的原理&#xff0c;掌握Noah-MP模型在单站和区域的模拟、模拟结果的输出和后续分析及可视化等方法&#xff1b;…

【Spring Boot】网页五子棋项目实现,手把手带你全盘解析(长达两万3千字的干货,坐好了,要发车了......)

目录 网页五子棋项目一、项目核心流程二、 登录模块2.1 前端输入用户信息2.2 后端进行数据库查询用户信息 三、 游戏大厅模块3.1 前端通过Ajax请求用户数据&#xff0c;后端从Session中拿取并从数据库中查询后返回3.2 前后端建立WebSocket连接&#xff0c;并进行判断&#xff0…

xxl-job登录没反应问题解决方法

最近在写一个关于xxl-job的项目&#xff0c;然后遇到了如下的问题&#xff0c;可以正常访问到xxl-job的登录界面但是点击登录按钮发现没有反应&#xff0c;并且没有发送任何请求。 排查步骤&#xff08;使用docker&#xff09; 1.重启mysql 2.重启docker 3.重写安装mysql 4.查看…

Mysql-索引结构

一.什么是索引&#xff1f; 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引 二.无索引的情况 找到…

【Linux】Linux的基本使用

一.Linux的背景知识. 1.1什么是Linux Linux是一种开源的类Unix操作系统内核. 和Windows是" 并列 "的关系. 1.2Linux的发行版本. Linux 严格意义来说只是一个 “操作系统内核”.一个完整的操作系统 操作系统内核 配套的应用程序. 由于 Linux 是一个完全开源免费…

基于JSP的高校二手交易平台

开头语&#xff1a;你好&#xff0c;我是专注于计算机技术的学姐码农小野&#xff0c;如果有任何技术需求&#xff0c;欢迎随时联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 JAVA MySQL 工具&#xff1a;常见Web浏览器&#xff0…

【开发踩坑】 MySQL不支持特殊字符(表情)插入问题

背景 线上功能报错&#xff1a; Cause:java.sql.SQLException:Incorrect string value:xFO\x9F\x9FxBO for column commentat row 1 uncategorized SQLException; SQL state [HY000]:error code [1366]排查 初步觉得是编码问题&#xff08;utf8 — utf8mb4&#xff09; 参考上…

Linux环境下dockes使用MongoDB,上传zip文件如何解压并备份恢复到MongoDB数据库中

1、准备 Docker 和 MongoDB 容器 建议主机端口改一下 docker run --name mongodb -d -p 27018:27017 mongo 2. 创建一个工作目录并将 zip 文件上传到dockers容器中 docker cp data.zip mongodb:/data.zip 3. 在 MongoDB 容器中解压 zip 文件&#xff08;也可以解压完再复制…