第十五届蓝桥杯大赛软件赛省赛(Java 大学B组)

蓝桥杯 2024年省赛真题

^Java 大学B组^

  • [试题 A: 报数游戏](#试题 A: 报数游戏)
  • [试题 B: 类斐波那契循环数](#试题 B: 类斐波那契循环数)
  • [试题 C: 分布式队列](#试题 C: 分布式队列)

在找工作,随便写写,安定下来再把去年国赛题解补上


试题 A: 报数游戏

本题总分: 5 5 5 分


【问题描述】

小蓝和朋友们在玩一个报数游戏。由于今年是 2024 2024 2024 年,他们决定要

从小到大轮流报出是 20 20 20 或 24 24 24 倍数的正整数。前 10 10 10 个被报出的数是 : : : 20 , 24 , 40 , 48 , 60 , 72 , 80 , 96 , 100 , 120 20, 24, 40, 48, 60, 72, 80, 96, 100, 120 20,24,40,48,60,72,80,96,100,120。请问第 202420242024 202420242024 202420242024 个被报出的数是多少?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


2429042904288


由容斥原理可知,第 i \rm i i 个报出的数为 k \rm k k 时,它们的关系为 i = k / 20 + k / 24 − k / l c m ( 20 , 24 ) \rm i=k/20+k/24-k/lcm(20,24) i=k/20+k/24−k/lcm(20,24) 即 i = 12 k \rm i=12k i=12k


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

本题总分: 5 5 5 分


【问题描述】

对于一个有 n n n 位的十进制数 N = d 1 d 2 d 3 ⋯ d n N = d_1d_2d_3\cdots d_n N=d1d2d3⋯dn,可以生成一个类斐波那契数列 S S S,数列 S S S 的前 n n n 个数为 { S 1 = d 1 , S 2 = d 2 , S 3 = d 3 , ⋯   , S n = d n } \{S_1 = d1_, S_2 = d_2, S_3 = d_3, \cdots, S_n = d_n\} {S1=d1,S2=d2,S3=d3,⋯,Sn=dn},数列 S S S 的第 k ( k > n ) k(k > n) k(k>n) 个数为 ∑ i = k − n k − 1 S i \sum^{k−1}_{i=k−n} S_i ∑i=k−nk−1Si。如果这个数 N N N 会出现在对应的类斐波那契数列 S S S 中,那么 N N N 就是一个类斐波那契循环数。

例如对于 197 197 197,对应的数列 S S S 为 { 1 , 9 , 7 , 17 , 33 , 57 , 107 , 197 , ⋯   } \{1, 9, 7, 17, 33, 57, 107, 197, \cdots \} {1,9,7,17,33,57,107,197,⋯}, 197 197 197 出现在 S S S 中,所以 197 197 197 是一个类斐波那契循环数。

请问在 0 0 0 至 1 0 7 10^7 107 中,最大的类斐波那契循环数是多少?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


7913837


假定答案为 7 7 7 位数,从后往前 B F \rm BF BF 就行

java 复制代码
public class Main {
	
	public static void main(String ...args) { new Main().run(); }
	
	void run() {
		int ans = 9999999, i, k;
		int[] buf = new int[100];
		for (;; --ans) {
			for (i = 7, k = ans, buf[8] = 0; i > 0; --i, k /= 10) {
				buf[8] += k % 10;
				buf[i] = k % 10;
			}
			for (i = 8; buf[i] < ans; ++i) buf[i + 1] = 2 * buf[i] - buf[i - 7];
			if (buf[i] == ans) break;
		}
		System.out.print(ans);
	}
}

试题 C: 分布式队列

时间限制: 3.0 s 3.0\mathrm s 3.0s 内存限制: 512.0 M B 512.0\mathrm{MB} 512.0MB 本题总分: 10 10 10 分


【问题描述】

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

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

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

【输入格式】

第一行包含一个整数 N N N,表示节点个数。

接下来包含多行输入,每一行包含一个操作,操作类型共有以下三种 : : : a d d 、 s y n c add、sync add、sync 和 q u e r y query query,各自的输入格式如下 : : :

1. 1. 1. a d d e l e m e n t : add\ element: add element:表示这是一个添加操作,将元素 e l e m e n t element element 添加到队列中;

2. 2. 2. s y n c f o l l o w e r _ i d : sync\ follower\_id: sync follower_id:表示这是一个同步操作, f o l l o w e r _ i d follower\_id follower_id 号副节点会从主节点中同步下一个自己缺失的元素;

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

【输出格式】

对于每一个 q u e r y 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

【样例说明】

执行到第一个 q u e r y query query 时,队列内容如下 : : :
0 : [ 1 , 2 ] 0:[1,2] 0:[1,2]
1 : [ ] 1:[] 1:[]
2 : [ ] 2:[] 2:[]

两个副节点中都无元素,因此答案为 0 0 0。

执行到第二个 q u e r y query query 时,队列内容如下 : : :
0 : [ 1 , 2 , 1 ] 0:[1,2,1] 0:[1,2,1]
1 : [ 1 , 2 ] 1:[1,2] 1:[1,2]
2 : [ 1 ] 2:[1] 2:[1]

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

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

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

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

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

【评测用例规模与约定】

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

对于 100 % 100\% 100% 的评测用例 : : : 1 ≤ 1 ≤ 1≤ 输入的操作数 ≤ 2000 ≤ 2000 ≤2000, 1 ≤ N ≤ 10 1 ≤ N ≤ 10 1≤N≤10, 1 ≤ f o l l o w e r _ i d < N 1 ≤ f ollower\_id < N 1≤follower_id<N, 0 ≤ e l e m e n t ≤ 1 0 5 0 ≤ element ≤ 10^5 0≤element≤105。


感兴趣的可以去了解下能算在分布式队列一类的 K a f k a \rm Kafka Kafka 中的高水位机制,这里数据量太小,就随便弄两下

java 复制代码
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.io.PrintWriter;

public class Main {
	
	public static void main(String ...args) throws IOException { new Main().run(); }
	
	StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
	PrintWriter out = new PrintWriter(System.out);
	
	int[] LEO = new int[10];
	
	void run() throws IOException {
		in.nextToken();
		int N = (int) in.nval;
		while (in.nextToken() != StreamTokenizer.TT_EOF) {
			switch (in.sval) {
				case "add":
					in.nextToken();
					++LEO[0];
					break;
				case "sync":
					in.nextToken();
					int id = (int) in.nval;
					if (LEO[id] < LEO[0]) ++LEO[id];
					break;
				case "query":
					int HW = 2000;
					for (int i = 0; i < N; ++i)
						if (HW > LEO[i]) HW = LEO[i];
					out.println(HW);
			}
		}
		out.flush();
	}
}

还有看到一些小白问 while(in.hasNext()) 停不下来,可以通过 Ctrl+Z 的方式强制关闭 J a v a \rm Java Java 的输入流,也可以通过 Scanner(String source) 的方式构造输入工具,两种方法都可以辅助通过样例在本机完成初步测试


蓝桥杯,弟中之弟,国一出来工作都找不到

相关推荐
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck2 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei2 小时前
java的类加载机制的学习
java·学习
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~4 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616884 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7894 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java5 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~5 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
程序媛小果5 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot