2020 第十一届蓝桥杯 JAVA C组 省赛真题(题解)

本文提供了2020年蓝桥杯JAVA C组省赛的部分试题解析,包括指数计算、字符串解密、跑步训练、合并检测等题目。涉及大整数计算、字符替换、循环计算及序列分析等算法问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

补充说明:一共有十道题,目前还需研究一下,后续会补充完整;多有不足或有不同思路欢迎大佬指教并分享;

试题 A: 指数计算

本题总分:5 分

【问题描述】

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

走过了 99 年。

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

【答案提交】

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

题目分析:
题意是计算7的2020次幂 除以 1921取余;
数值非常大,第一时间想到的是可以用java中的大整数来解决(理论上大整数可以读取无限大的数);

public static void main(String[] args) {
   
		
		BigInteger a=new BigInteger("7");		
		BigInteger b=new BigInteger("1921");
		//pow返回第一个参数的第二个参数次方;
		//remainder(BigInteger val)_a.mod(b)_余数   %
		BigInteger temp =a.pow(2020).remainder(b);
		
		System.out.println(temp);		
	}

在这里插入图片描述
————————————————————————
试题 B: 解密

本题总分:5 分

【问题描述】

小明设计了一种文章加密的方法:对于每个字母 c,将它变成某个另外的

字符 Tc。下表给出了字符变换的规则:

字母c 字符Tc 字母c 字符Tc 字母c 字符Tc 字母c 字符Tc
a y n i A Y N L
b x o g B X O G
c m p o C M P O
d d q u D D Q U
e a r f E A R F
f c s s F C S S
g i t z G I T Z
h k u p H K U P
i n v w I N V W
j t w b J T W B
k j x r K J X R
l h y e L H Y E
m q z v M Q Z V

例如,

将字符串 YeRi 加密可得字符串 EaFn。

小明有一个随机的字符串,加密后为

EaFnjISplhFviDhwFbEjRjfIBBkRyY

(由 30 个大小写英文字母组成,不包含换行符),请问原字符串是多少?

(如果你把以上字符串和表格复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 str.txt,第一行为上面的字符串,后面 52 行依次为表格中的内容。)

【答案提交】

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

只包含 30 个大小写英文字母的字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。

题目分析:
这题可以用hashmap的键值对来求出相对应的字母,也可以直接用给的文本文件直接找到加密字母所对应的原字母(毕竟是填空题);

答案:YeRikGSunlRzgDlvRwYkXkrGWWhXaA

试题 C: 跑步训练

本题总分:10 分

【问题描述】

小明要做一个跑步训练。

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

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

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

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

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

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

【答案提交】

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

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

题目分析:
小明初始体力为10000,均匀变化就是一分钟跑步一分钟休息,直到小明体力值为0时停止,求这个时间是以秒的形式;
(记录多少个一分钟也就是求出多少次,次数乘以60就是秒数(整数的情况)
,还要考虑600米没有跑完体力值就为零的情况,一分钟损耗600,一秒就是10点体力值;体力除以10就是秒数;)
【用的for循环,也可以用while循环】

public static void main(String[] args) {
   
	
		int sum=10000;//初始体力
		int count =0;//分钟
		boolean or = true;
		
		for (int i = 1;; i++) {
   
						
			if(sum<600 && or){
   
				break;
			}
			if(i%2!=0) {
   
				sum -= 600;
				or=false;
			}else {
   
				sum +=300;
				or=true;
			}
			count++;
		}
		//两种情况的相加得出总秒数;
		System.out.println(count*60+sum/10
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值