第十五届蓝桥杯大赛软件赛省赛(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) 的方式构造输入工具,两种方法都可以辅助通过样例在本机完成初步测试


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

相关推荐
极客先躯43 分钟前
高级java每日一道面试题-2024年10月3日-分布式篇-分布式系统中的容错策略都有哪些?
java·分布式·版本控制·共识算法·超时重试·心跳检测·容错策略
夜月行者1 小时前
如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue
java·后端·ssm
程序猿小D1 小时前
第二百六十七节 JPA教程 - JPA查询AND条件示例
java·开发语言·前端·数据库·windows·python·jpa
潘多编程1 小时前
Java中的状态机实现:使用Spring State Machine管理复杂状态流转
java·开发语言·spring
_阿伟_2 小时前
SpringMVC
java·spring
代码在改了2 小时前
springboot厨房达人美食分享平台(源码+文档+调试+答疑)
java·spring boot
猿java2 小时前
使用 Kafka面临的挑战
java·后端·kafka
wclass-zhengge2 小时前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌2 小时前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.2 小时前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法