-
-
微信
-
微博
分享文章到微博
-
复制链接
复制链接到剪贴板
-
第十一届蓝桥杯 2020年省赛真题 (Java 大学C组 )
【摘要】 蓝桥杯---Java大学C组---个人赛日常刷题【day7】
试题 A: 指数计算
题目:
【问题描述】
7 月 1 日是建党日,从 1921 年到 2020 年, 已经带领中国人民
走过了 99 年。
请计算:7 ^ 2020 mod 1921,其中 A mod B 表示 A 除以 B 的余数。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
思路:这道题其实就是直接for循环就可以了。
代码:
import java.util.*;
public class Main
{
public static void main(String args[])
{
int a=1,b=1921,c=7;
for (int i = 1; i <= 2020; i++) {
a=a*7;
if (a>=1921) {
a=a%1921;
}
}
System.out.println(a);
}
}

试题 B: 解密
题目:
【问题描述】
小明设计了一种文章加密的方法:对于每个字母 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 个大小写英文字母的字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。
思路:可以直接对照上边的表找出来的。
代码:
import java.util.*;
public class Main
{
public static void main(String args[])
{
String l = "EaFnjISplhFviDhwFbEjRjfIBBkRyY";
String j = "";
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
String m = "yxmdacikntjhqlgoufszpwbrevYXMDACIKNTJHQLGOUFSZPWBREV";
HashMap<String, String> hashMap = new HashMap<String, String>();
for (int x = 0; x < str.length(); x++) {
hashMap.put(String.valueOf(m.charAt(x)), String.valueOf(str.charAt(x)));
}
for (int z = 0; z < l.length(); z++) {
j += hashMap.get(String.valueOf(l.charAt(z)));
}
System.out.println(j);
}
}

试题 C: 跑步训练
题目:
【问题描述】
小明要做一个跑步训练。
初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟损耗600 的体力。
如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。
小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。
如果某个时刻小明的体力到达 0,他就停止锻炼。
请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。
答案中只填写数,不填写单位。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,
在提交答案时只填写这个整数,填写多余的内容将无法得分。
代码:
import java.util.*;
public class Main
{
public static void main(String args[])
{
int a = 10000;// 体力值
int count = 0;
boolean b = true;// 判断是否需要跑步
while (true) {
// 如果小于600体力并且需要跑步,证明这一分钟跑不完
if (a < 600 && b) {
break;
}
if (b) {
a = a - 600;
b = false;
} else {
a = a + 300;
b = true;
}
count++;
}
int time=count*60+a/10;
System.out.println(time);
}
}

试题 D: 合并检测
题目:
【问题描述】
最近存在A病,最近在 A 国蔓延,为了尽快控制病*,A 国准备给大量民众进病*检测。
然而,用于检测的试剂盒紧缺。
为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人(k个)采集的标本放到同一个试剂盒中进行检测。
如果结果为阴性,则说明这 k个人都是阴性,用一个试剂盒完成了 k 个人的检测。
如果结果为阳性,则说明至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测
(从理论上看,如果检测前 k 1 个人都是阴性可以推断出第 k 个人是阳性,但是在实际操作中不会利用此推断,而是将 k 个人独立检测),加上最开始的合并检测,一共使用了 k + 1 个试剂盒完成了 k 个人的检测。
A 国估计被测的民众的感染率大概是 1%,呈均匀分布。请问 k 取多少能
最节省试剂盒?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,
在提交答案时只填写这个整数,填写多余的内容将无法得分;
代码:
public class Main {
public static void main(String[] args) {
int min = 999990;
int ans = -1;
for (int i = 1; i <= 100; i++) { // i个人一块测
int temp;
if (100 % i != 0) {
temp = 100 / i + i + 1;
} else {
temp = 100 / i + i;
}
if (min > temp) {
min = temp;
ans = i;
}
}
System.out.println(ans);
}
}

试题 E: REPEAT 程序
题目:
【问题描述】
附件 prog.txt 中是一个用某种语言写的程序。
其中 REPEAT k 表示一个次数为 k 的循环。循环控制的范围由缩进表达,
从次行开始连续的缩进比该行多的(前面的空白更长的)为循环包含的内容。
例如如下片段:
REPEAT 2:
A = A + 4
REPEAT 5:
REPEAT 6:
A = A + 5
A = A + 7
A = A + 8
A = A + 9
A = A + 4 所在的行到 A = A + 8 所在的行都在第一行的
循环两次中。
REPEAT 6: 所在的行到 A = A + 7 所在的行都在 REPEAT 5: 循环中。
A = A + 5 实际总共的循环次数是 2 × 5 × 6 = 60 次。
请问该程序执行完毕之后,A 的值是多少?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
思路:这道题就是几个for循环。
代码:
import java.util.*;
public class Main
{
public static void main(String args[])
{
int A = 0;
for (int a = 0; a < 2; a++) {
A = A + 4;
for (int b = 0; b < 5; b++) {
for (int c = 0; c < 6; c++) {
A = A + 5;
}
A = A + 7;
}
A = A + 8;
}
A = A + 9;
System.out.println(A);
}
}

试题 F: 分类计数
题目:
【问题描述】
输入一个字符串,请输出这个字符串包含多少个大写字母,多少个小写字母,多少个数字。
【输入格式】
输入一行包含一个字符串。
【输出格式】
输出三行,每行一个整数,分别表示大写字母、小写字母和数字的个数。
【样例输入】
1+a=Aab
【样例输出】
1
3
1
代码:
import java.util.*;
public class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
String h = sc.next();
int A = 0;
int a = 0;
int num = 0;
for (int i = 0; i < h.length(); i++) {
if (h.charAt(i) >= 'a' && h.charAt(i) <= 'z') {
a++;
} else if (h.charAt(i) >= 'A' && h.charAt(i) <= 'Z') {
A++;
} else if (h.charAt(i) >= '0' && h.charAt(i) <= '9') {
num++;
}
}
System.out.println("整数" + num);
System.out.println("大写字母" + A);
System.out.println("小写字母" + a);
}
}

试题 G: 整除序列
题目:
【问题描述】
本题总分:15 分
有一个序列,序列的第一个数是 n,后面的每个数是前一个数整除 2,请输
出这个序列中值为正数的项。
【输入格式】
输入一行包含一个整数 n。
【输出格式】
输出一行,包含多个整数,相邻的整数之间用一个空格分隔,表示答案。
【样例输入】
20
1
【样例输出】
20 10 5 2 1
1
【评测用例规模与约定】
对于 80% 的评测用例,1 ≤ n ≤ 109。
对于所有评测用例,1 ≤ n ≤ 1018。
代码:
import java.util.*;
public class Main
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
while(n!=0) {
System.out.print(n+" ");
n=n/2;
}
}
}

试题 H: 走方格
题目:
【问题描述】
在平面上有一些二维的点阵。
这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 n 行,
从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。
现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下走。
注意,如果行号和列数都是偶数,不能走入这一格中。
问有多少种方案。
【输入格式】
输入一行包含两个整数 n, m。
【输出格式】
输出一个整数,表示答案。
【样例输入】
3 4
1
【样例输出】
2
1
【样例输入】
6 6
1
【样例输出】
0
1
【评测用例规模与约定】
对于所有评测用例,1 ≤ n ≤ 30, 1 ≤ m ≤ 30。
代码:
import java.util.*;
public class Main{
static Scanner sc = new Scanner(System.in);
static int[][] arr = new int[31][31];
public static void main(String[] args){
int n = sc.nextInt();
int m = sc.nextInt();
for(int i = 1;i<=n;i++){
for(int j = 1;j<=m;j++){
if(i==1||j==1){
arr[i][j]=1;
}else if(i%2==0&&j%2==0){
continue;
}else{
arr[i][j]=arr[i-1][j]+arr[i][j-1];
}
}
}
System.out.println(arr[n][m]);
}
}

试题 I: 字符串编码
题目:
【问题描述】
小明发明了一种给由全大写字母组成的字符串编码的方法。
对于每一个大写字母,小明将它转换成它在 26 个英文字母中序号,
即 A → 1, B → 2, … Z →26。
这样一个字符串就能被转化成一个数字序列:
比如 ABCXYZ → 123242526。
1
现在给定一个转换后的数字序列,小明想还原出原本的字符串。
当然这样的还原有可能存在多个符合条件的字符串。小明希望找出其中字典序最大的字符串。
【输入格式】
一个数字序列。
【输出格式】
一个只包含大写字母的字符串,代表答案
【样例输入】
123242526
1
【样例输出】
LCXYZ
1
【评测用例规模与约定】
对于 20% 的评测用例,输入的长度不超过 20。
对于所有评测用例,输入的长度不超过 200000。
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
char[] a = { '0', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
Scanner sc = new Scanner(System.in);
String data = sc.next();
char b[] = data.toCharArray();
// for (char c : b) {
// System.out.print(c+" ");
// }
for (int i = 0; i < b.length; i++) {
String data2 = b[i] + "" + b[i + 1];
int c = Integer.parseInt(data2);
if (c >= 1 && c <= 26) {
System.out.print(a[c]);
i++;
} else {
data2 = b[i] + "";
c = Integer.parseInt(data2);
System.out.print(a[c]);
}
}
}
}

试题 J: 整数小拼接
题目:
【问题描述】
给定义个长度为 n 的数组 A1, A2, · · · , An。你可以从中选出两个数 Ai 和 Aj (i 不等于 j),然后将 Ai 和 Aj 一前一后拼成一个新的整数。
例如 12 和 345 可以拼成 12345 或 34512 。
注意交换 Ai 和 Aj 的顺序总是被视为 2 种拼法,即便
是 Ai = Aj 时。
请你计算有多少种拼法满足拼出的整数小于等于 K。
【输入格式】
第一行包含 2 个整数 n 和 K。
第二行包含 n 个整数 A1, A2, · · · , An。
【输出格式】
一个整数代表答案。
【样例输入】
4 33
1 2 3 4
1
2
3
【样例输出】
8
1
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ N ≤ 1000, 1 ≤ K ≤ 108, 1 ≤ Ai ≤ 104。
对于所有评测用例,1 ≤ N ≤ 100000,1 ≤ K ≤ 1010,1 ≤ Ai ≤ 109。
代码:
import java.util.Scanner;
public class 整数小拼接 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
int[] a=new int[n];
int sum=0;
for (int i = 0; i < n; i++) {
a[i]=sc.nextInt();
}
//从前向后遍历
for (int i = 0; i < a.length; i++) {
for (int j = i+1; j < a.length; j++) {
if(a[i]!=a[j]){
String temp=""+a[i]+a[j];
if(Integer.parseInt(temp)<=k){
sum++;
}
}
}
}
//从后向前遍历
for (int i = 0; i < a.length; i++) {
for (int j = i+1; j < a.length; j++) {
if(a[i]!=a[j]){
String temp=""+a[j]+a[i];
if(Integer.parseInt(temp)<=k){
sum++;
}
}
}
}
System.out.println(sum);
}
}
蓝桥杯一起加油呐!
推荐

华为开发者空间发布
让每位开发者拥有一台云主机
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
全部回复
上滑加载中
评论(0)