2024年十五届蓝桥杯省赛大学B组真题(Java残缺版)

2024年十五届蓝桥杯省赛大学B组真题(Java)

前言:

赛后一直犹豫要不要对比赛进行复盘出个题解,拖到了现在,终于也是等到比赛结果出来,看到没有辜负个人期望成功取得省一,决定在国赛前对省赛进行一个复盘,顺带查漏补缺,总体而言,这次JavaB组的省赛题偏基础,没有太多的算法,也是延续了暴力杯的头衔,这次对数学的考察居然比以往提高了不少,令我感到意外,题外话不多说,让我们一起来复盘一下第十五届的省赛题吧,同时也祝愿各位能取得一个不错的成绩。
(未完篇)

题单链接

点击此处跳转

试题A:报数游戏

本题总分:5 分

【问题描述】

在这里插入图片描述

【答案提交】

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

答案:2429042904288

【解题思路】

该题数据量大,单纯靠电脑跑不太现实,那么其中肯定有数学规律在,通过计算可以得出 20 和 24 的最小公倍数是 120 ,再对符合条件的前四十个数进行输出,我们可以发现该规律是十次一循环,每次结尾都是 120 的倍数,那么我们可以求得第 202420242020 个数的值为 202420242020/10*120=2429042904240 ,再通过观察发现第四个数与上一个循环相差 48 ,把两个数值相加得到答案 2429042904288

【代码】

package SS2024b.baoshuyouxi;

public class Main {
   
	public static void main(String[] args) {
   
		long n = 202420242024L;
//		long count = 0;
//		for (long i = 1; count < 40; i++) {
   
//			if (i * 4 % 20 == 0 || i * 4 % 24 == 0) {
   
//				count++;
//				System.out.println(i * 4);
//			}
//		}
		long num1 = (n - 4) / 10 * 120;
		long num2 = 48;
		long num = num1 + num2;
		System.out.println(num);
	}
}

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

本题总分:5 分

【问题描述】

在这里插入图片描述

【答案提交】

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

答案:7913837

【解题思路】

给出一个判断是否为类斐波那契循环数的判断式,该判断式类似于滚动窗口,固定取一个窗口大小,该大小为 n 的值,维护窗口内所有值的和 sum ,判断 sum 在小于等于 n 是是否存在相等的情况即可,从 1e7 开始一直递减遍历下去,遇到的第一个符合条件的数即为答案。

【代码】

package SS2024b.leifeibonaqixunhuan;

import java.util.ArrayList;

public class Main {
   
	public static void main(String[] args) {
   
		int l = (int) 1e7;
		while (l > 0) {
   
			if (isLei(l)) {
   
				System.out.println(l);
				break;
			}
			l--;
		}
	}

	static boolean isLei(int n) {
   
		boolean flag = false;
		int n1 = n;
		ArrayList<Integer> ys = new ArrayList<Integer>();
		while (n1 != 0) {
   
			ys.add(n1 % 10);
			n1 /= 10;
		}
		ArrayList<Integer> s = new ArrayList<Integer>();
		s.add(0);
		int sum = 0;
		for (int i = ys.size() - 1; i >= 0; i--) {
   
			s.add(ys.get(i));
			sum += ys.get(i);
		}

		int index = 0;
		while (sum <= n) {
   
			if (index != 0) {
   
				sum *= 2;
			}
			s.add(sum -= s.get(index++));
			if (sum == n) {
   
				flag = true;
				break;
			}
		}
		return flag;
	}
}

试题 C: 分布式队列

时间限制: 3.0s 内存限制: 512.0MB 本题总分:10 分

【问题描述】

在这里插入图片描述

【输入格式】

在这里插入图片描述

【输出格式】

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

【样例输入】

3
a
第十一届蓝桥杯第二场java大学b真题共分为两道编程题和一道综合应用题,以下是真题及解析。 第一题是给定一个字符串,求出字符串中所有数字的总和。首先我们可以使用正则表达式来匹配字符串中的数字,然后将匹配到的数字累加起来即可。可以使用Java中的Pattern和Matcher类来实现正则匹配,具体代码如下: ```java import java.util.regex.*; public class Main { public static void main(String[] args) { String str = "abc123def456ghi789"; int sum = 0; Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher(str); while(matcher.find()) { sum += Integer.parseInt(matcher.group()); } System.out.println("数字总和为:" + sum); } } ``` 第二题是给定两个字符串,判断第二个字符串是否是第一个字符串的子串。可以使用Java中的contains()方法来判断一个字符串是否包含另一个字符串。具体代码如下: ```java public class Main { public static void main(String[] args) { String str1 = "abcdefg"; String str2 = "cde"; if (str1.contains(str2)) { System.out.println("第二个字符串是第一个字符串的子串!"); } else { System.out.println("第二个字符串不是第一个字符串的子串!"); } } } ``` 综合应用题是实现一个简单的计算器,根据输入的两个数字和运算符进行相应的运算并输出结果。我们可以使用Java中的Scanner类来获取用户输入的数字和运算符,并根据运算符进行相应的运算。具体代码如下: ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入第一个数字:"); int num1 = scanner.nextInt(); System.out.print("请输入第二个数字:"); int num2 = scanner.nextInt(); System.out.print("请输入运算符(+、-、*、/):"); String operator = scanner.next(); double result = 0; switch(operator) { case "+": result = num1 + num2; break; case "-": result = num1 - num2; break; case "*": result = num1 * num2; break; case "/": result = num1 / num2; break; default: System.out.println("无效的运算符!"); } System.out.println("计算结果为:" + result); } } ``` 以上就是第十一届蓝桥杯第二场java大学b真题及解析的回答,希望能对你有所帮助!
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王老汉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值