试题 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: 解密
【解题思路】
- 最开始想找这个密码转换有没有什么规律,然后就画了个图从这个图里看出来根本没什么规律,是我想多了,而且这只是第二题,不需要想那么复杂。
- 本道题是一道填空题,而且随机字符串个数不多,我们可以直接通过表格一一对应找到答案即可。
- 使用集合中的HashMap键值对储存表中转换密码数据,键值对的数据可以直接在代码中定义,或者通过输入储存在键值对中,建议使用后者,题中给了一个txt文件,所以后者比前者做题时间较快。
- 使用数组下标与字母的一一对应,eg:arr [0]这个表示字母a,那么它对应的y就转换成相应的数字储存到这个arr[0]中,最后在转换回来,稍微比较麻烦,在这道题上比较浪费时间,有兴趣的可以写写。
【代码如下】
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);
}
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,他就停止锻炼。
请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。
答案中只填写数,不填写单位。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【解题思路】
- 单纯的计算思路:跑一分钟消耗600体力,休息一分钟增加300体力,那么合在一块儿就是每两分钟消耗300体力(这个的前提是:两分钟中有消耗600体力的能力),这样的话,10000/300≈33个两分钟(但32个两分钟消耗的体力 = 9600,没有办法再消耗600体力了)。还剩下400体力,又因为一分钟消耗600体力,相当于1秒钟消耗10体力,那么400体力 => 40秒。故:运动时间 = 32个两分钟 + 40秒 = 3800秒。
- 根据上面的计算思路,也可以转化成代码,但是由于是计算机,它的计算速度不需要将两分钟合并计算的操作。
【代码如下】
/**
* 初始时,小明充满体力,体力值计为 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);
}
}
【填空结果】