补充说明:一共有十道题,目前还需研究一下,后续会补充完整;多有不足或有不同思路欢迎大佬指教并分享;
试题 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的键值对来求出相对应的字母,也可以直接用给的文本文件直接找到加密字母所对应的原字母(毕竟是填空题);
————————————————————————
试题 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);
还可以通过计算来求出结果:
(先跑后休息,也就是奇数时体力减600,偶数时体力加300,一跑一休息看成一个循环)
10000/(600-300)=33.33…
32*(600-300)=9600
10000-9600=400
400<600
总秒数:
32x2x60+400/10=3880