第十一届蓝桥杯Java C组 省赛真题(1~3题)

试题 A: 指数计算

本题总分:5 分

【问题描述】

7 月 1 日是建党日,从 1921 年到 2020 年, 已经带领中国人民

走过了 99 年。

请计算:7 ^ 2020 mod 1921,其中 A mod B 表示 A 除以 B 的余数。

【答案提交】

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个

整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【代码如下】

import java.math.BigInteger;

/**
 * 请计算:7 ^ 2020 mod 1921,其中 A mod B 表示 A 除以 B 的余数。
 * @author hf
 *
 */
public class Blogs3 {
	public static void main(String[] args) {
		BigInteger x = new BigInteger("7");
		BigInteger y = new BigInteger("1921");
		// remainder():取余 ; pow(): 幂函数
		BigInteger z = x.pow(2020).remainder(y); 
		System.out.println(z); 
	}
}

【填空结果】
第一题答案

试题 B: 解密

解密题图片
【解题思路】

  1. 最开始想找这个密码转换有没有什么规律,然后就画了个图题解从这个图里看出来根本没什么规律,是我想多了,而且这只是第二题,不需要想那么复杂。
  2. 本道题是一道填空题,而且随机字符串个数不多,我们可以直接通过表格一一对应找到答案即可。
  3. 使用集合中的HashMap键值对储存表中转换密码数据,键值对的数据可以直接在代码中定义,或者通过输入储存在键值对中,建议使用后者,题中给了一个txt文件,所以后者比前者做题时间较快。
  4. 使用数组下标与字母的一一对应,eg:arr [0]这个表示字母a,那么它对应的y就转换成相应的数字储存到这个arr[0]中,最后在转换回来,稍微比较麻烦,在这道题上比较浪费时间,有兴趣的可以写写。
    注:问题是给的是加密以后的字符串,让找的是原字符串,所以代码中的c和tc换一下。。。刚看的,注意一下
    【代码如下】
import java.util.HashMap;
import java.util.Scanner;

/**
 * @author hf
 *
 */
public class Blogs1 {
	public static void main(String[] args) {
		HashMap<Character, Character> coadMap = new HashMap<>(); //用来储存表格的键值对
		Scanner sc = new Scanner(System.in);
		// 将52组密码输入并且存入hashmap中
		for (int i = 0; i < 52; i++) {
			char c = sc.next().trim().charAt(0);
			char tc = sc.next().trim().charAt(0);
			// coadMap.put(c, tc); 这个是找加密的
			coadMap.put(tc , c); // 这个是解密的,望注意
		}
		
		String str = sc.next(); // 输入要转换的密码字符串
		char [] ch = str.toCharArray(); // 将字符串转换成字符数组
		// 通过循环将每个字符进行转换
		for (char c : ch) {
			System.out.print(coadMap.get(c));
		}
		sc.close();
	}
}

【填空结果】
这个答案是错误的,这是求加密的了。
答案图片
这才是正确答案
在这里插入图片描述

试题 C: 跑步训练

本题总分:10 分

【问题描述】

小明要做一个跑步训练。

初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟损耗

600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。

小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循

环。如果某个时刻小明的体力到达 0,他就停止锻炼。

请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。

答案中只填写数,不填写单位。

【答案提交】

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个

整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【解题思路】

  1. 单纯的计算思路:跑一分钟消耗600体力,休息一分钟增加300体力,那么合在一块儿就是每两分钟消耗300体力(这个的前提是:两分钟中有消耗600体力的能力),这样的话,10000/300≈33个两分钟(但32个两分钟消耗的体力 = 9600,没有办法再消耗600体力了)。还剩下400体力,又因为一分钟消耗600体力,相当于1秒钟消耗10体力,那么400体力 => 40秒。故:运动时间 = 32个两分钟 + 40秒 = 3800秒。
  2. 根据上面的计算思路,也可以转化成代码,但是由于是计算机,它的计算速度不需要将两分钟合并计算的操作。

【代码如下】

/**
 * 初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟损耗600 的体力。
 * 
 * 如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。
 * 
 * 小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。
 * 
 * 如果某个时刻小明的体力到达 0,他就停止锻炼。
 * 
 * 请问小明在多久后停止锻炼。
 * 
 * @author hf
 *
 */
public class Blogs2 {
	public static void main(String[] args) {
		int start = 10000; // 起始值 
		boolean f = true; // 用来判断是消耗还是休息
		int min = 0; // 分钟
  		
		while (true) {
			// 跳出循环的条件
			if (start < 600 && f) {
				break;
			}
			if (f) {
				start -= 600;
				f = false;
			}else {
				start += 300;
				f = true;
			}
			min++; //不管是消耗还是增加体力分钟每轮循环都+1
		}
		// 获得总运动时间:其中因为一分钟消耗600体力,相当于1秒钟消耗10体力
		int y = min * 60 + (start / 10); 
		System.out.println(y);
	}
}

【填空结果】

在这里插入图片描述

第4~6题

第十一届蓝桥杯Java C组 省赛真题(2)

第十一届蓝桥杯省赛第二场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真题及解析的回答,希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值