蓝桥杯java c组真题解析_2020 第十一届蓝桥杯 JAVA C组 省赛真题(解)

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

试题 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);

}

蓝桥杯java c组真题解析_2020 第十一届蓝桥杯 JAVA C组 省赛真题(解)_第1张图片

————————————————————————

试题 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的键值对来求出相对应的字母,也可以直接用给的文本文件直接找到加密字母所对应的原字母(毕竟是填空题);

————————————————————————

试题 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);

蓝桥杯java c组真题解析_2020 第十一届蓝桥杯 JAVA C组 省赛真题(解)_第2张图片

还可以通过计算来求出结果:

(先跑后休息,也就是奇数时体力减600,偶数时体力加300,一跑一休息看成一个循环)

10000/(600-300)=33.33…

32*(600-300)=9600

10000-9600=400

400<600

总秒数:

32x2x60+400/10=3880

你可能感兴趣的:(蓝桥杯java,c组真题解析)