15届蓝桥JavaB组 前6道题解

news2025/4/1 23:18:56

15届蓝桥JavaB组 前6道题解

  • 报数游戏
  • 类斐波那契循环数
  • 分布式队列
  • 食堂
  • 最优分组
  • 星际旅行

报数游戏

在这里插入图片描述

import java.util.Scanner;

//分析:
//20和24的最小公倍数是120
//题目给出了前10个数,发现第10个数是120,说明每10个数出现一个公倍数
//第20个数出现 120*2
//第30个数出现 120*3
//...
//第202420242020个数出现 120*20242024202
//第202420242024个数出现 120*20242024202+48
//每10个是一轮 每一轮的数之间相差相同 
public class Main {
    public static void main(String[] args) {
        long a=20242024202l*120;
        System.out.println(48+a);
    }

}

类斐波那契循环数

在这里插入图片描述

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
//分析:
//从1e7开始从大到小遍历 用check方法来检查是否是目标数
//主要看check方法怎么写 用到了队列来维护n个数的数列

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int test=10000000;
        for(int i=test;i>=197;i--){
            //检查i是不是斐波那契循环数
            if(check(i)){
                System.out.println(i);
                return;
            }

        }
        System.out.println(197);
        scan.close();
    }
     //检查n是不是斐波那契环数
    static boolean check(int n){
        //记录n的值 
        int memo=n;
        //将n从地位开始进栈
        Stack<Integer> stack=new Stack();
        while(n!=0){
            stack.add(n%10);
            n=n/10;
        }
        //队列来维护大小为sz的数列 sz就是几位数
       Queue<Integer> queue=new LinkedList();
       int sum=0;//维护队列中sz个元素的总和
       while(!stack.isEmpty()){
           int poll=stack.pop();
           queue.add(poll);
           sum+=poll;
       }
        int sz=queue.size();//几位数
        while(true){
           int cur=sum;
            if(cur>memo){
                return false;
            }
            if(cur==memo){
                return true;
            }
            //太小了 把cur入队列 队列出一个 
            int poll=queue.poll();
            sum=sum-poll+cur;
            queue.add(cur);
        }
    }
}

scan.hasNext() 方法的作用是检查输入源中是否还有下一个。

分布式队列

在这里插入图片描述

import java.util.LinkedList;
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
	static LinkedList<Integer>[] arr;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n=scan.nextInt();
        arr=new LinkedList[n];//[0,n-1]条队列
        for(int i=0;i<n;i++) {
        	arr[i]=new LinkedList<Integer>();
        }
        while(scan.hasNext()) {
        	String s=scan.next();
          
            switch (s) {
    		case "add":
    			int num=scan.nextInt();
    			add(num);
    			break;
    		case "sync":
    			num=scan.nextInt();
    			sync(num);//同步num队列
    			break;
    		case "query":
    			int res=check();//检查队列中最小的个数
    			System.out.println(res);
    			break;
    		}
        }
    }

	private static int check() {
		// TODO Auto-generated method stub
		int min=Integer.MAX_VALUE;
		for(int i=0;i<arr.length;i++) {
			min=Math.min(min,arr[i].size());
		}
		return min;
		
	}

	private static void sync(int num) {
		// TODO Auto-generated method stub
		int sz=arr[num].size();
		if(sz>=arr[0].size()) {
			return;
		}
		int get=arr[0].get(sz);
		arr[num].add(sz, get);
	}

	private static void add( int num) {
		// TODO Auto-generated method stub
		arr[0].add(num);
	}
}

食堂

在这里插入图片描述

思路:目的是座位坐得越满越好,首先考虑满座的情况,然后考虑空一座 ,接着空两座,空三座等等。在考虑满座的情况时也要注意顺序! 先选择拼接人数少的

import java.util.ArrayList;
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
//暴力枚举 
public class Main {
    public static void main(String[] args) {
       Scanner scan=new Scanner(System.in);
       int t=scan.nextInt();
       while(t--!=0) {
    	   int a2=scan.nextInt();
    	   int a3=scan.nextInt();
    	   int a4=scan.nextInt();
    	   int b4=scan.nextInt();
    	   int b6=scan.nextInt();
    	   int meet=0;
            //满座 a4-->b4
            while(a4>=1&&b4>=1){
                meet+=4;
                a4--;
                b4--;
            }
            //满座 a3+a3-->b6
            while(a3>=2&&b6>=1){
                meet+=6;
                a3-=2;
                b6--;
            }
            //满座 a4+a2-->b6
            while(a4>=1&&a2>=1&&b6>=1){
                meet+=6;
                a2--;
                a4--;
                b6--;
            }
            //满座 a2+a2-->b4
            while(a2>=2&&b4>=1){
                meet+=4;
                a2-=2;
                b4--;
            }
           //满座 a2+a2+a2-->b6
    	    while(a2>=3&&b6>=1){
                meet+=6;
                a2-=3;
                b6--;
            }
            //空一座 a2+a3-->b6
            while(a2>=1&&a3>=1&&b6>=1){
                meet+=5;
                a2--;
                a3--;
                b6--;
            }
            //空一座 a3-->b4
            while(a3>=1&&b4>=1){
                meet+=3;
                a3--;
                b4--;
            }
            //空两座 a2+a2-->b6
            while(a2>=2&&b6>=1){
                meet+=4;
                a2-=2;
                b6--;
            }
            //空两座 a4-->b6
            while(a4>=1&&b6>=1){
                meet+=4;
                a4--;
                b6--;
            }
            //空两座 a2-->b4
            while(a2>=1&&b4>=1){
                meet+=2;
                a2--;
                b4--;
            }
            //空三座 a3-->b6
            while(a3>=1&&b6>=1){
                meet+=3;
                a3--;
                b6--;
            }
            //空四座 a2-->b6
            while(a2>=1&&b6>=1){
                meet+=2;
                a2--;
                b6--;
            }
    	   System.out.println(meet);
    	   
       }
        scan.close();
    }

}

最优分组

在这里插入图片描述

分析:
一共有n只,每个小组k只,所以一共有n/k 个小组
有病毒的概率是p 没有病毒的概率就是1-p
一个小组没有病毒的概率是(1-p)^ k,有病毒的概率是1-(1-p)^k
一共有n/k个小组 我们知道:有毒的小组数量=总小组数量 * 一个小组有毒的概率
这些小组中有病毒的小组有(n/k) * (1-p)^k 个
这些小组中没有病毒的个数是(n/k) * (1-(1-p)^k) 个
测试剂的期望=(n/k) * (1-p)^k + (n/k) * (1-(1-p)^k) * (k+1)
在上面公式中n和p已知的,k在变,所以我们枚举k的取值记录最小值

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n=scan.nextInt();
        double p=scan.nextDouble();
        double q=1-p;//没毒的概率
        int kMax=n;
        int res=Integer.MAX_VALUE;//记录最小的k
        double memoS=Double.MAX_VALUE;
        for(int k=1;k<=kMax;k++) {
            if(n%k!=0) {
                continue;
            }
            int sz=n/k;//小组数量
            double S=0;
            if(k==1){//小组一人 
                S=Math.pow(q, k)*sz+(1-Math.pow(q, k))*(k)*sz;//期望值为S
            }else{
                S=Math.pow(q, k)*sz+(1-Math.pow(q, k))*(k+1)*sz;//期望值为S
            }
            if(S<memoS) {
                res=k;
                memoS=S;
            }
        }
        System.out.println(res);
        scan.close();
    }
}

星际旅行

在这里插入图片描述

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n=scan.nextInt();//n个星球
        int m=scan.nextInt();//m个门
        int q=scan.nextInt();//q个盲盒
        LinkedList<Integer>[] graph=new LinkedList[n+1];
        for(int i=0;i<=n;i++) {
        	graph[i]=new LinkedList<>();
        }
        //创建无向图
        for(int i=0;i<m;i++){
            int a=scan.nextInt();
            int b=scan.nextInt();
            graph[a].add(b);
            graph[b].add(a);
        }
        int count=0;//记录可以到达的星球个数
        for(int i=0;i<q;i++){
            int x=scan.nextInt();//起点位置
            int y=scan.nextInt();//最大步数
            //bfs遍历 从x节点遍历y层遇到的所有节点个数
           count += bfs(graph,x,y);
        }
        double res= count*1.0/q;
        System.out.printf("%.2f",res);
        scan.close();
    }

	private static int bfs(LinkedList<Integer>[] graph, int start, int steps) {
		Queue<Integer> queue=new LinkedList<>();
		int count=0;//数一数入队列的节点(星系)
		int sz=graph.length;//个数
		int[]visit=new int[sz];//防止重复计数
		Arrays.fill(visit, -1);//-1代表没有访问 ,1表示访问了
		queue.add(start);
		count++;
		visit[start]=1;
		while(!queue.isEmpty()) {
			int nums=queue.size();
            if(steps<=0){
                break;
            }
			for(int i=0;i<nums;i++) {
				int cur=queue.poll();
				for(int neibor:graph[cur]) {
					if(visit[neibor]==-1) {//没有访问的星球
						queue.add(neibor);
						visit[neibor]=1;
						count++;
					}
				}
			}
			steps--;
		}
		return count;
	}
}

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

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

相关文章

蓝桥杯 14 天 十五届蓝桥杯 数字诗意

static boolean kkk(long x) {if(x1)return true;else {// 初始化xx为1&#xff0c;用于计算2的幂long xx 1;// 循环60次&#xff0c;检查2的幂是否等于xfor (int i 1; i < 60; i) {xx * 2; // 每次将xx乘以2if (xx x) { // 如果xx等于x&#xff0c;说明x是2的幂&#xf…

MP4音视频格式

1.MP4 MP4是一种用于封装音视频/字幕/图片/章节信息等数据的多媒体容器格式&#xff0c;是MPEG-4系列的成员之一 2.文件结构 MP4由一层层的嵌套Box&#xff08;atom&#xff09;组成 [ size (4 bytes) ][ type (4 bytes)][ payload (嵌套box或者数据) ] 3.常见Box 类型名称…

国内GitHub镜像源全解析:加速访问与替代方案指南

在数字化开发日益普及的今天,GitHub作为全球最大的代码托管平台,已成为开发者不可或缺的资源库。然而,由于网络环境的限制,国内用户在访问GitHub时常常面临速度慢、连接不稳定等问题。为了提升开发效率,国内涌现出多个GitHub镜像源,为开发者提供了快速、稳定的代码克隆与…

Vue3动态加载组件,警告:Vue received a Component than was made a reactive object

场景 2个按钮&#xff0c;点击之后&#xff0c;下面加载不同的组件。 现象 分析 实际动态加载的组件&#xff0c;不是深层响应式的&#xff0c;推荐使用 shallowReactive 或 shallowRef&#xff0c;即浅层作用形式&#xff0c;仅最外层是响应式&#xff0c;以此来提升性能。…

【源码阅读/Vue Flask前后端】简历数据查询功能

目录 一、Flask后端部分modelServiceroute 二、Vue前端部分index.js main.vue功能界面templatescriptstyle 一般就是三个层面&#xff0c;model层面用来建立数据库的字段&#xff0c;service用来对model进行操作&#xff0c;写一些数据库操作的代码&#xff0c;route就是具体的…

Vue背景介绍+声明式渲染+数据响应式

一、Vue背景 1. 为什么学Vue 1.前后端开发就业必备技能 2.岗位多&#xff0c;绝⼤互联⽹公司都在使⽤Vue&#xff0c;还可以助⼒SpringBoot、C等项⽬开发 3.提⾼开发效率 更少的时间,干更多的活,提高项目开发速度 原生JS做法 Vue做法 总而言之: 使用Vue能够赋能、提升就业竞争…

HarmonyOS NEXT 鸿蒙中手写和使用第三方仓库封装Logger打印工具

应用场景 在鸿蒙开发中&#xff0c;我们在很多时候调试代码都需要用到日志打印工具&#xff0c;但无论是hilog还是console.log,都用起来相对麻烦&#xff0c;而且需要手动将对象转换为JSON字符串的方式才能打印&#xff0c;并且在控制台日志中输出的格式也非常丑。所以下面我们…

批量合并 PDF 文档,支持合并成单个文档,也支持按文件夹合并 PDF 文档

在日常工作中&#xff0c;合并多个 PDF 文档为一个文件是非常常见的需求。通过合并 PDF&#xff0c;不仅能够更方便地进行管理&#xff0c;还能在特定场景下&#xff08;如批量打印&#xff09;提高效率。那么&#xff0c;当我们需要批量合并多个 PDF 文件时&#xff0c;是否有…

rbpf虚拟机-汇编和反汇编器

文章目录 一、概述二、主要功能三、关键函数解析3.1 汇编器3.1.1 parse -转换为Instruction列表3.1.2 assemble_internal-转换为Insn 3.2 反汇编器3.2.1 to_insn_vec-转换为机器指令 四、总结 Welcome to Code Blocks blog 本篇文章主要介绍了 [rbpf虚拟机-汇编和反汇编器] ❤…

虚拟现实--->unity学习

前言&#xff1a;这学期劳动课选了虚拟现实&#xff0c;其中老师算挺认真的&#xff0c;当然对一些不感兴趣的同学来说是一种折磨&#xff0c;我对这个unity的学习以及后续的虚幻引擎刚开始连基础的概念都没有&#xff0c;后面渐渐也是滋生了一些兴趣&#xff0c;用这篇博客记录…

一文详解QT环境搭建:ubuntu20.4安装配置Qt5

随着软件开发技术的不断进步&#xff0c;跨平台应用程序的需求日益增长&#xff0c;开发者们面临着如何在不同操作系统之间保持代码的一致性和效率的问题。Qt作为一个成熟的跨平台C框架&#xff0c;在这方面提供了卓越的支持&#xff0c;不仅简化了GUI应用程序的创建过程&#…

【IDEA的个性化配置】

目录&#xff1a; 一&#xff1a;隐藏项目路径二&#xff1a;禁用斜体注释三&#xff1a;重新Maven构建未完待续... 一&#xff1a;隐藏项目路径 &#x1f60a;在IDEA左侧的Project目录中&#xff0c;项目名称后面显示了项目的文件路径地址&#xff0c;如果不喜欢可以隐藏&…

【Kafka】分布式消息队列的核心奥秘

文章目录 一、Kafka 的基石概念​主题&#xff08;Topic&#xff09;​分区&#xff08;Partition&#xff09;​生产者&#xff08;Producer&#xff09;​消费者&#xff08;Consumer&#xff09;​ 二、Kafka 的架构探秘​Broker 集群​副本机制​ 三、Kafka 的卓越特性​高…

自动化发布工具CI/CD实践Jenkins部署与配置教程

1. 前言背景 其实一直想把jenkins 的笔记整理下&#xff0c;介于公司这次升级jenkins2.0 &#xff0c;根据自己部署的一些经验&#xff0c;我把它整理成笔记。 之前我们的jenkins1.0 时代 还一直停留在 free style 或者 maven 风格的项目&#xff0c;随着项目的日益增多&#x…

什么是SQL作业

SQL作业是在数据库服务器上按特定时间或间隔自动执行的计划任务或流程&#xff0c;这些作业由Microsoft SQL Server中的SQL Server代理管理&#xff0c;对于自动执行日常任务&#xff08;如数据库系统中的备份、数据导入和报告生成&#xff09;以及确保及时准确地处理和更新数据…

Android实践开发制作小猴子摘桃小游戏

Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取&#xff1a;Android可能存在版本差异项目如果不能正确运行&#xff0c;可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…

springboot整合couchbase(集群)

springboot整合couchbase 1、Couchbase1.1、介绍1.2、Bucket1.3、Couchbase SDK 2、(key,value)写入couchbase集群2.1、总体图2.2、依赖2.3、CouchbaseConfig 配置文件2.4、代码使用 1、Couchbase 1.1、介绍 1.2、Bucket 在 Couchbase 中&#xff0c;bucket 是一个重要的概念…

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示 前言 不知道大家在编程时候的按键习惯是怎样的。输入完左括号后编辑器一般会自动补全右括号&#xff0c;输入完左括号的内容后&#xff0c;是按→跳过右括号还是按)跳过右括号呢&#xff1f; for (int i 0; i < a.s…

[Linux]在vim中批量注释与批量取消注释

1.在vim中批量注释的步骤&#xff1a; 1.在normal模式下按Ctrl v &#xff0c;进入V-BLOCK模式 2.按 J 键 或 K 键选择要注释的内容&#xff0c;J向上K向下 我们给第5&#xff0c;6&#xff0c;7行进行注释 3.按住shift i进入插入模式&#xff0c;输入 // 4.点击ESC键&…

NC,GFS、ICON 数据气象信息可视化--降雨量的实现

随着气象数据的快速发展和应用&#xff0c;气象信息的可视化成为了一项不可或缺的技术手段。它不仅能帮助气象专家快速解读数据&#xff0c;还能为公众提供直观的天气预报信息。今天&#xff0c;我们将从降雨量的可视化出发&#xff0c;带大家一起了解如何实现气象数据的可视化…