2025蓝桥杯JAVA编程题练习Day8

news2025/5/18 4:16:06

1. 路径

题目描述

小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径。

小蓝的图由 2021 个结点组成,依次编号 1 至 2021。

对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值大于 21,则两个结点 之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条 长度为 a 和 b 的最小公倍数的无向边相连。

例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无 向边,长度为 24;结点 15 和结点 25 之间有一条无向边,长度为 75。

请计算,结点 1 和结点 2021 之间的最短路径长度是多少。

提示:建议使用计算机编程解决问题。

解题要点

由于你在图中使用了加权边,传统的 BFS 不能直接用于加权边的最短路径求解。对于加权图,通常使用 Dijkstra 算法来计算最短路径。

主要步骤:

  1. 使用 优先队列(最小堆)来帮助处理加权图。

  2. 使用 Dijkstra 算法来求解从节点 1 到节点 n 的最短路径。

AC代码

import java.util.*;
class Edge{
	int target;
	int weight;
	public Edge(int target,int weight) {
		this.target=target;
		this.weight=weight;
	}
}
public class exercise1{
	public static Scanner scan=new Scanner(System.in);
	public static int gcd(int a,int b) {
		return b==0?a:gcd(b,a%b);
	}
	public static int lcm(int a,int b) {
		return (a*b)/gcd(a,b);
	}
	public static void main(String[] args) {
		int n=2021;
		List<List<Edge>>graph=new LinkedList<>();
		for(int i=0;i<=n;i++) {
			graph.add(new LinkedList<>());
		}
		for(int i=1;i<=n;i++) {
			for(int j=i+1;j<=n;j++) {
				if(j-i>21)continue;
				else {
					int weight=lcm(j,i);
					graph.get(i).add(new Edge(j,weight));
					graph.get(j).add(new Edge(i,weight));
				}
			}
		}
		//求1到n的最短路径(Dijkstra算法)
		int[] dist = new int[n+1]; // 存储最短路径
		Arrays.fill(dist, Integer.MAX_VALUE);
		dist[1]=0;
		// 优先队列,存储每个节点和它的当前距离
		PriorityQueue<int[]>pq=new PriorityQueue<>(Comparator.comparingInt(a -> a[1])); // 按距离排序
		pq.add(new int[]{1,0});
		while(!pq.isEmpty()) {
			int[] cur=pq.poll();
			int u=cur[0];
			int cd=cur[1];
			 // 如果当前节点的距离已经大于已知的最短距离,跳过
			if(cd>dist[u])continue;
			for(Edge ed:graph.get(u)) {
				int v=ed.target;
				int w=ed.weight;
				int newd=cd+w;
				if(newd<dist[v]) {
					dist[v]=newd;
					pq.add(new int[] {v,newd});
				}
			}
		}
		System.out.println(dist[n]);
	}
}

2.排列字母

问题描述

小蓝要把一个字符串中的字母按其在字母表中的顺序排列。

例如,LANQIAO 排列后为 AAILNOQ。

又如,GOODGOODSTUDYDAYDAYUP 排列后为 AADDDDDGGOOOOPSTUUYYY。

请问对于以下字符串,排列之后字符串是什么?

WHERETHEREISAWILLTHEREISAWAY

AC代码

import java.util.*;
public class exercise1{
	public static Scanner scan=new Scanner(System.in);
	public static void main(String[] args) {
		String s="WHERETHEREISAWILLTHEREISAWAY";
		char[] a=s.toCharArray();
		Arrays.sort(a);
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]);
		}
	}
}

3.饮料换购

题目描述

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊 C 型饮料,凭 3 个瓶盖可以再换一瓶 C 型饮料,并且可以一直循环下去(但不允许暂借或赊账)。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料。

输入描述

输入一个整数 n(0<n<1000)n(0<n<1000),表示开始购买的饮料数量。

输出描述

输出一个整数,表示实际得到的饮料数

输入输出样例

输入

100

输出

149

AC代码 

import java.util.*;
public class exercise1{
	public static Scanner scan=new Scanner(System.in);
	public static void main(String[] args) {
		int n=scan.nextInt();
		int ans=0;
		while(n>=3) {
			n-=3;
			ans+=3;
			n+=1;
		}
		ans+=n;
		System.out.println(ans);
	}
}

4.七边形

问题描述

小蓝迷上了七边形,他正尝试用小球来拼接出他喜欢的七边形图案。 下图是他拼出的前四个七边形,第 11 至第 44 个七边形图案消耗的小球数量依次是 11、77、1818、3434。 请问对于第 2024060120240601 个七边形图案,需要消耗的小球数量是多少?

AC代码

(记得开long!!)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        long ans=0;
        for(int i=1;i<=20240601;i++){
          if(i==1)ans=1;
          else{
            ans+=i*3;
            ans+=(i-2)*2;
          }
        }
        System.out.println(ans);
        scan.close();
    }
}

5.完美数对

问题描述

蓝桥杯作为最热门的程序设计竞赛之一,主办方为了更好地评估选手的程序设计能力,新研制了一台用于检测选手程序设计能力的仪器。

主办方邀请了 NN 位同学进行检测,以验证机器的准确性。检测结果表示为数组 AA,其中第 ii 位同学检测出的能力值为 AiAi​。

得知这一检测结果后,蓝桥杯的出题人小蓝获得了出题灵感。他希望统计满足以下条件的正整数对 (a,b)(a,b) 的数量,这些数对被称为 "完美数对":

完美数对定义:对于数对 (a,b)(a,b),若在数组 AA 中,数值 aa 至少出现了 bb 次,且数值 bb 至少出现了 aa 次,则数对 (a,b)(a,b) 被称为完美数对。

现在,请您协助小蓝解决这个问题。

输入格式

第一行输入一个整数 N(2≤N≤106)N(2≤N≤106) 表示接受检测的同学数量。

第二行输入 NN 个整数 A1,A2,A3,⋯,AN(1≤Ai≤106)A1​,A2​,A3​,⋯,AN​(1≤Ai​≤106) 表示每位同学的能力值。

输出格式

输出一个整数表示答案。

样例输入

5
1 1 2 2 3

样例输出

4

样例说明

对于样例,数对 (1,1),(1,2),(2,1),(2,2)(1,1),(1,2),(2,1),(2,2) 满足条件,所以答案为 44。

AC代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n=scan.nextInt();
        int[] a=new int[n];
        for(int i=0;i<n;i++){
          a[i]=scan.nextInt();
        }
        HashMap<Integer,Integer> hp=new HashMap<>();
        for(int i=0;i<n;i++){
          hp.put(a[i],hp.getOrDefault(a[i],0)+1); //不是更新,而是每一个都放进去
        }
        int ans=0;
        //枚举hp里的每一个(HashMap的每一项)
        for(HashMap.Entry<Integer,Integer> e:hp.entrySet()){
          int x=e.getKey(); //值
          int hashX=e.getValue(); //次数
          for(int b=1;b<=hashX;b++){
            if(hp.containsKey(b) && hp.get(b)>=x)ans++;
          }
        }
        System.out.println(ans);
        scan.close();
    }
}

 6.排列高手

问题描述

第十六届蓝桥杯即将来临,组委会的专家们希望此次比赛能够更好地考察选手们的思维能力,因此特邀著名的排列高手——小蓝参与助阵!希望他能为本届蓝桥杯设计一道富有创意的排列题。

小蓝接到任务后,立即动起脑筋,口中大喊:“题来!”于是,一道关于排列的问题浮现:

给定一个大小为 nn 的排列,你可以任意调整排列的顺序,以使调整后的排列所有非空子数组的 mexmex 之和最小,你需要求出这个最小的 mexmex 之和。

其中 mexmex 表示最小的不在集合中的正整数,例如 mex([1,3,4])=2,mex([2,3,4])=1mex([1,3,4])=2,mex([2,3,4])=1。

排列:一个由 11 到 nn 的所有整数组成的序列,其中每个数字恰好出现一次。

现在请你尝试解决小蓝给出的这道问题。

输入格式

输入一行包括一个整数 n(1≤n≤105)n(1≤n≤105) 表示排列的大小。

输出格式

输出一个整数表示答案。

样例输入

3

样例输出

11

样例说明

对于样例,一种可能的最优排列情况为 [1,3,2][1,3,2],其所有子数组 mexmex 之和为 1111。

其中 mex([1])=2,mex([1,3])=2,mex([1,3,2])=4,mex([3])=1,mex([3,2])=1,mex([2])=1mex([1])=2,mex([1,3])=2,mex([1,3,2])=4,mex([3])=1,mex([3,2])=1,mex([2])=1。

AC代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n=scan.nextInt();
        //1  n  n-1 .... 2
        long ans = 0;
        for(int i = n;i>=2;i--){
          ans += i+1;
        }
        ans += n+1;
        System.out.println(ans);
        scan.close();
    }
}

7.美丽区间

问题描述

美丽区间是这样的一组区间:[L1,R1]、[L2,R2]、[L3,R3]... 构造美丽区间需要满足以下条件:

  1. L1=1
  2. Li≤Ri
  3. Ri−Li≥K
  4. 对于任意的 i>1,有 Li=Ri−1 + 1
  5. gcd(Li,Ri)=1,其中 gcd 指两个数的最大公约数
  6. 在满足上述条件的情况下,Li​、Ri 之间的差尽可能的小。

输入格式

第一行输入一个整数 K。 第二行输入一个整数 T,表示有 T 组测试用例。 接下来 T 行,每行输入一个整数 n。

输出格式

对每个输入的整数 n,输出一行,包含一个整数,表示 n 属于第几个美丽区间。

样例输入

10
3
123
33
10

样例输出

11
3
1

样例说明

第 1 个美丽区间为:[1,11]。

第 2 个美丽区间为:[12,23]。

第 3 个美丽区间为:[24,35]。

⋯⋯

第 11 个美丽区间为:[120,131]。

评测用例规模与约定

对于 60% 的评测用例:1≤T≤10^3,1≤K≤10^6,1≤n≤10^6。

对于 100% 的评测用例:1≤T≤10^6,1≤K≤10^6,1≤n≤10^6。

AC代码

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

public class Main {
    public static int gcd(int a,int b){
      return b==0?a:gcd(b,a%b);
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int k=scan.nextInt();
        HashMap<Integer,Integer> hp=new HashMap<>();
        int id=1;
        int l=1;
        int r=1;
        for(int i=1;i<=1000000+10;i++){
          l=i;
          i+=k;
          r=i;
          while(gcd(l,r)!=1)r++;
          i=r;
          hp.put(r,id);
          id++;
        }
        int t=scan.nextInt();
        for(int i=1;i<=t;i++){
          int n=scan.nextInt();
          while(!hp.containsKey(n))n++;
          System.out.println(hp.get(n));
        }
        scan.close();
    }
}

8.园丁

问题描述

小明是一位尽职尽责的园丁。这天他负责维护一棵树,树上有 n 个结点 1,2,…,n,根结点为 1,结点 i 的权值为 ai。

他需要更改一些结点的权值为任意正整数,使得对于任意一个至少有 2 个儿子结点的结点 i 满足:任意两个 i 的儿子结点的权值的乘积都不是完全平方数。

请问小明至少需要修改多少个结点的权值?

输入格式

输入共 n+1 行。 第一行为一个正整数 n。 第二行为 n 个由空格分开的正整数 a1,a2,…,an​。 后面 n−1 行,每行两个正整数表示树上的一条边。

输出格式

输出共 1 行,一个整数表示答案。

样例输入

6
1 2 9 8 4 4
1 2
1 3
1 4
2 5
2 6

样例输出

2

样例说明

其中一种方案:将结点 2,5 的权值分别修改为 3,2。

评测用例规模与约定

对于 20% 的评测用例,保证 n≤10^3。

对于 100% 的评测用例,保证 n≤10^5,1≤ai≤10^9。

9.分组

问题描述

小明班上有 n 名同学,老师准备按上一次考试的分数对同学们进行分组,第 i 名同学的分数为 ai​。老师希望把同学们分为尽可能多的小组,且满足每个小组中的同学分数的最大值至少是最小值的两倍。请问最多能分出多少个小组?如果把所有人分到同一组都不能满足条件则输出 0。

输入格式

输入共 2 行。 第一行为一个正整数 n。 第二行为 n 个由空格分开的正整数表示 a1,a2,…,an。

输出格式

输出共 1 行,一个整数表示答案。

样例输入

6
3 5 2 1 4 2

样例输出

3

样例说明

其中一种分组方式:第一组 {a4,a1}={1,3},第二组 {a3,a2}={2,5},第三组 {a6,a5}={2,4}。

AC代码 

贪心,由于最多可以有n / 2组(不可能1个人一组),所以可以先将数组排序,使用双指针匹配,左指针从0开始,右指针从n/2开始,贪心地选取最小的值与右半部分匹配。

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

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n=scan.nextInt();
        int [] a=new int [n];
        for(int i=0;i<n;i++)a[i]=scan.nextInt();
        Arrays.sort(a);
        int ans=0;
        for(int l=0,r=n/2;r<n;r++){
          if(2*a[l]>a[r])continue;
          if(r>=n)break;
          l++;
          ans++;
        }
        System.out.println(ans);
        scan.close();
    }
}

10.喜糖摆放

问题描述

在过年时,蓝桥村的孩子们充满活力,他们化身为捣蛋鬼,挨家挨户寻讨喜糖。他们一共收到了 NN 颗糖,每颗糖的甜度各不相同,第 ii 颗糖的甜度为 AiAi​。

然而,如何分配这些喜糖却成了一个令人困扰的问题,因为糖的数量不能完全平均分给孩子们。

蓝桥村的村长察觉到了这个困难,于是说道:"我有一个问题,只要你们中有小朋友能解决,我就会提供足够的喜糖,使得你们可以均分。"

问题陈述如下:

每次可以选择将任意位置的糖果移到最后,求使得糖果按照升序排列所需的最小操作次数。

作为蓝桥村最聪明的孩子之一,你能否尝试解决这个问题呢?

输入格式

第一行输入一个整数 N(2≤N≤105)N(2≤N≤105) 表示糖果数量。

第二行输入 NN 个整数 A1,A2,⋯,AN(1≤Ai≤109)A1​,A2​,⋯,AN​(1≤Ai​≤109) 表示糖果的甜度,数据保证 A1,A2,⋯,ANA1​,A2​,⋯,AN​ 各不相同。

输出格式

输出一个整数表示答案。

样例输入

5
1 3 2 4 5

样例输出

3

AC代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n=scan.nextInt();
        int[] a=new int[n];
        int[] b=new int[n];
        for(int i=0;i<n;i++){
          a[i]=scan.nextInt();
          b[i]=a[i];
        }
        Arrays.sort(b);
        int j=0;
        for(int i=0;i<n;i++){
          if(a[i]==b[j]){
            j++;
          }
        }
        System.out.println(n-j);
        scan.close();
    }
}

 

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

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

相关文章

通信安全堡垒:profinet转ethernet ip主网关提升冶炼安全与连接

作为钢铁冶炼生产线的安全检查员&#xff0c;我在此提交关于使用profinet转ethernetip网关前后对生产线连接及安全影响的检查报告。 使用profinet转ethernetip网关前的情况&#xff1a; 在未使用profinet转ethernetip网关之前&#xff0c;我们的EtherNet/IP测温仪和流量计与PR…

DL00219-基于深度学习的水稻病害检测系统含源码

&#x1f33e; 基于深度学习的水稻病害检测系统 — 智能农业的未来&#xff0c;守护农田的每一寸土地&#xff01; &#x1f69c; 完整系统获取见文末 水稻病害检测&#xff0c;一直是农业领域的一大难题。传统的人工检测不仅耗时耗力&#xff0c;还容易因经验不足导致漏检或误…

【51单片机中断】

目录 配置流程 1.在IE寄存器中开启总中断通道和需要的某中断通道 2.在TCON寄存器开启所用中断的触发方式 3.使用中断函数完成中断 4.若需要中断嵌套则在IP寄存器中配置 5.若需要使用串口的中断&#xff0c;则配置SCON寄存器 6.代码示例 配置流程 1.在IE寄存器中开启总…

JavaSE基础语法之方法

方法 一、方法入门 1.方法定义 方法是一种语法结构&#xff0c;它可以把一段代码封装成一个功能&#xff0c;以便重复调用。 2.方法的格式 修饰符 返回值类型 方法名( 形参列表 ){方法体代码(需要执行的功能代码) }示例&#xff1a; public static int sum ( int a ,…

华为网路设备学习-22(路由器OSPF-LSA及特殊详解)

一、基本概念 OSPF协议的基本概念 OSPF是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;主要用于在自治系统&#xff08;AS&#xff09;内部使路由器获得远端网络的路由信息。OSPF是一种链路状态路由协议&#xff0c;不直接传递路由表&#xff0c;而是通过交换链路…

go-数据库基本操作

1. 配置数据库 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm" ) #配置表结构 type User struct {ID int64 json:"id" gorm:"primary_key" // 主键ID自增长Username stringPassword string } #配置连接接信息 func…

Mysql存储过程(附案例)

​ 文章目录 存储过程概述1、基本语法2、变量①、系统变量②、用户自定义变量③、局部变量 3、流程控制语句①、if语句②、参数③、case语句④、while语句⑤、repeat语句⑥、loop语句⑦、cursor游标⑧、handler 4、存储函数 存储过程概述 存储过程是事先经过编译并存储在数据…

【Web应用】Vue 项目前端项目文件夹和文件介绍

文章目录 ⭐前言⭐一、文件夹介绍&#x1f31f;1、.idea&#x1f31f;2、bin&#x1f31f;3、build&#x1f31f;4、node_modules&#x1f31f;5、public&#x1f31f;6、src ⭐二、文件介绍&#x1f31f;1、.editorconfig&#x1f31f;2、.env.development、.env.production、…

Stratix 10 FPGA DDR4 选型

文章目录 前言DDR3 和 DDR4 的区别Micron 8Gb DDR4 规格书详解Micron 8Gb DDR4 编码规则ConfigurationDDR4 寻址原理 Speed Grade内存的频率MT/s 与 MHz&#xff1a;更好的内存速度衡量指标为什么 DDR4 的核心频率与 I/O 总线频率的比例是 1:4 呢&#xff1f; 带宽 Altera FPGA…

CMU-15445(4)——PROJECT#1-BufferPoolManager-Task#2

PROJECT#1-BufferPoolManager Task #2 - Disk Scheduler 在前一节我实现了 TASK1 并通过了测试&#xff0c;在本节中&#xff0c;我将逐步实现 TASK2。 如上图&#xff0c;Page Table&#xff08;页表&#xff09;通过哈希表实现&#xff0c;用于跟踪当前存在于内存中的页&am…

百度智能云千帆携手联想,共创MCP生态宇宙

5月7日&#xff0c;2025联想创新科技大会&#xff08;Tech World&#xff09;在上海世博中心举行&#xff0c;本届大会以“让AI成为创新生产力”为主题。会上&#xff0c;联想集团董事长兼CEO杨元庆展示了包括覆盖全场景的超级智能体矩阵&#xff0c;包括个人超级智能体、企业超…

【动态导通电阻】GaN HEMT动态导通电阻的精确测量

2023 年 7 月,瑞士洛桑联邦理工学院的 Hongkeng Zhu 和 Elison Matioli 在《IEEE Transactions on Power Electronics》期刊发表了题为《Accurate Measurement of Dynamic ON-Resistance in GaN Transistors at Steady-State》的文章,基于提出的稳态测量方法,研究了氮化镓(…

java 使用zxing生成条形码(可自定义文字位置、边框样式)

最新工作中遇到生成条形码的需求&#xff0c;经过一番摸索之后找到了zxing这个工具类&#xff0c;实现效果如下&#xff1a; 首先引入依赖&#xff1a; <!-- 条形码生成器 --><dependency><groupId>com.google.zxing</groupId><artifactId&g…

day19-线性表(顺序表)(链表I)

一、补充 安装软件命令&#xff1a; sudo apt-get install (软件名) 安装格式化对齐&#xff1a;sudo apt-get install clang-format内存泄漏检测工具&#xff1a; sudo apt-get install valgrind 编译后&#xff0c;使用命令 valgrind ./a.out 即可看内存是…

CSS- 2.1 实战之图文混排、表格、表单、学校官网一级导航栏

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 点…

从零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案

文章目录 前言1. 安装Ollama2.Gemma3模型安装与运行3. 安装Open WebUI图形化界面3.1 Open WebUI安装运行3.2 添加模型3.3 多模态测试 4. 安装内网穿透工具5. 配置固定公网地址总结 前言 如今各家的AI大模型厮杀得如火如荼&#xff0c;每天都有新的突破。今天我要给大家安利一款…

贝叶斯优化Transformer融合支持向量机多变量时间序列预测,Matlab实现

贝叶斯优化Transformer融合支持向量机多变量时间序列预测&#xff0c;Matlab实现 目录 贝叶斯优化Transformer融合支持向量机多变量时间序列预测&#xff0c;Matlab实现效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.BO-TransformerSVM多变量时间序列预测&#xff0c…

C++_STL_map与set

1. 关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、 forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面 存储的是元素本身。那什么是…

项目依赖版本修改

React项目 因UI库无法兼容React19版本,故此降低React版本至18.x (为什么不升级UI库版本,因为没有最新版,而且找不到好的替代品) package.json 先修改package.json文件中你想修改的依赖版本号 "dependencies": { - "react": "^19.1.0", - "…

蚁群算法赋能生鲜配送:MATLAB 实现多约束路径优化

在生鲜农产品配送中&#xff0c;如何平衡运输效率与成本控制始终是行业难题。本文聚焦多目标路径优化&#xff0c;通过 MATLAB 实现蚁群算法&#xff0c;解决包含载重限制、时间窗约束、冷藏货损成本的复杂配送问题。代码完整复现了从数据生成到路径优化的全流程&#xff0c;助…