2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现)-创新互联
- 填空题
- 问题1:大于 2022 的最小数
- 问题2:时间间隔
- 问题3:进制转换
- 问题4:最长路径
- 问题5:2022最多能拆分为多少个质数之和
- 大题:
- 问题6:拷贝文件
- 问题7:去除重复单词
- 问题8:补充回文串
- 问题9:X图形个数
请找到一个大于 2022 的最小数,这个数转换成二进制之后,最低的 6 个二进制为全为 0 。请将这个数的十进制形式作为答案提交。
public static void main(String[] args) {int flag=0;
for(int i=2023;;i++){String str=Integer.toBinaryString(i); //转换为二进制
if(str.length()>=6) {//二进制长度大于6才继续
String substr = str.substring(str.length() - 6); //取出最后6 个二进制位
if(substr.equals("000000")) {System.out.println(i);
break;
}
}
}
}
结果:
2048
问题2:时间间隔计算1949年10月1日至2022年1月1日间隔的天数
直接用电脑自带计算器:
问题3:进制转换8518 是一个非常特殊的数,如果把这个数看成 16 进制数,它的值为 (8518)16=8161616+51616+116+8=34072,而 34072 正好是 8518 的整数倍。9558 也是这样一个数,当看成 16 进制时是 38232。其实长度为 1 的数 0 到 9 都满足看成 16 进制后是自己的整数倍(1倍)。请问,除开长度为 1 的数,最小的满足这样条件的数是多少?
public static void main(String[] args) {for(int i=10;;i++){int num=Integer.valueOf(Integer.toString(i),16);//将数值看作16进制数,将其转为10进制
if(num%i==0) {System.out.println(i);
break;
}
}
}
结果:
1038
问题4:最长路径问题5:2022最多能拆分为多少个质数之和从矩阵第一行第一列出发,只能水平往右走或者竖直往下走,求所走折线的数字之和的大值。
2022能拆分为多个质数之和,请问最多能拆分为多少个?
public class h5 {// 判断数字是否为质数
public static boolean iszhishu(int n){for(int i=2;iif(n%i==0)
return false;
}
return true;
}
public static void main(String[] args) {int sum=2; //记录质数之和
int count=1; //记录质数的个数
for(int i=3;i<2022;i++){if(iszhishu(i)) {sum += i;
count++;
}
if(sum>=2022) { //看>=2022最近的数是哪个
System.out.println("质数之和:"+sum);
System.out.println("当前数字:"+i);
System.out.println("质数个数:"+count);
break;
}
}
}
}
结果:
质数之和:2127
当前数字:139
质数个数:34
和为2127时质数个数为34,所以仅需剔除5这个质数,就可以得到2022,因此答案为34-1=33个。
大题: 问题6:拷贝文件小蓝正在拷贝一份文件,他现在已经拷贝了 t 秒时间,已经拷贝了 c 字节,文件总共有 s 字节, 如果拷贝是匀速进行的,请问小蓝大概还需要拷贝多少秒?
- 输入格式
- 输入一行包含三个整数 t, c, s,相邻两个整数之间用一个空格分隔。
- 输出格式
- 输出一个整数,表示答案。数据保证答案正好是整数。
- 样例输入
3 10 20
- 样例输出
3
- 样例输入
30 14 21
- 样例输出
15
public class h6 {public static void main(String[] args) {Scanner sc=new Scanner(System.in);
int t=sc.nextInt(); //已经拷贝了 t 秒时间
int c=sc.nextInt(); //已经拷贝了 c 字节
int s=sc.nextInt(); //文件总共有 s 字节
double speed=c/(double)t; //计算拷贝速度,记得转换为double
int ans=(int)Math.round((s-c)/speed); //结果四舍五入
System.out.println(ans);
}
}
结果:
3 10 20
3
30 14 21
15
30 14 22
17
问题7:去除重复单词小蓝有 n 个单词,但是单词中有一些是重复的,请帮小蓝去除重复的单词。
- 输入格式
- 输入第一行包含一个正整数 n ,表示小蓝的单词数量。接下来 n 行,每行包含一个由小写字母组成的单词。
- 输出格式
- 请输出去除重复后的那些单词。如果一个单词出现了多遍,请保留第一次出现的单词,去除之后出现的单词,按输入的顺序输出。
- 样例输入
5
lanqiao
hi
hello
hello
lanqiao
- 样例输出
lanqiao
hi
hello
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Scanner;
public class h7 {public static void main(String[] args) {Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String[] s=new String[n];
for(int i=0;ilist1=new ArrayList<>(Arrays.asList(s));
LinkedHashSethashSet=new LinkedHashSet<>(list1); //集合自动去重
ArrayListlist2=new ArrayList<>(hashSet);
for(String str:list2)
System.out.println(str);
}
}
结果:
8
lanqiao
lanqiao
hi
lanqiao
hello
hello
hello
hi
lanqiao
hi
hello
问题8:补充回文串一个字符串如果从左向右读和从右向左读相同,则称为一个回文串,例如 lanqiaoaiqnal 是一个回文串。小蓝有一个字符串,请将这个字符串右边加上一些字符,使其成为一个回文串。如果有多种方案,请输出最短的回文串。
- 输入格式
- 输入一行包含一个字符串,由小写英文字母组成。
- 输出格式
- 输出一行包含答案。
- 样例输入
lanqiao`
- 样例输出
lanqiaoaiqnal`
- 样例输入
banana`
- 样例输出
bananab
- 样例输入
noon
- 样例输出
noon
public class h8 {//判断是否是回文串
public static boolean ishuiwen(String s){int n=s.length();
int l=0,r=n-1;
while(lif(s.charAt(l)==s.charAt(r)){l++;
r--;
}
else
return false;
}
return true;
}
public static void main(String[] args) {Scanner sc = new Scanner(System.in);
String s = sc.next();
StringBuilder sb = new StringBuilder(s);
if (ishuiwen(s))
System.out.println(s);
else {int l = 0, r = s.length() - 1; //左右双指针
while (l< r) {if (sb.charAt(l) != sb.charAt(r)) {sb.insert(r + 1, sb.charAt(l)); //左右指针字符不对应,就插入
} else
r--;
l++;
}
System.out.println(sb.toString());
}
}
}
结果
banana
bananab
lanqiao
lanqiaoaiqnal
noon
noon
问题9:X图形个数给定一个字母矩阵。一个 X 图形由中心点和由中心点向四个45度斜线方向引出的直线段组成,四条线段的长度相同,而且四条线段上的字母和中心点的字母相同。一个 X图形可以使用三个整数 r, c, L 来描述,其中 r, c 表示中心点位于第 r 行第 c 列,正整数 L 表示引出的直线段的长度。 对于 1 到 L 之间的每个整数 i,X图形满足:第 r-i 行第 c-i 列与第 r 行第 c 列相同,第 r-i 行第 c+i 列与第 r 行第 c 列相同,第 r+i 行第 c-i 列与第 r 行第 c 列相同,第 r+i 行第 c+i 列与第 r 行第 c 列相同。例如,对于下面的字母矩阵中,所有的字母 L 组成一个 X图形,其中中间的 5 个 L 也组成一个 X图形。所有字母 Q 组成了一个 X图形。
LAAALA
ALQLQA
AALQAA
ALQLQA
LAAALA
给定一个字母矩阵,请求其中有多少个 X图形。
- 输入格式
- 输入第一行包含两个整数 n, m,分别表示字母矩阵的行数和列数。接下来 n 行,每行 m 个大写字母,为给定的矩阵。
- 输出格式
- 输出一行,包含一个整数,表示答案。
- 样例输入
5 6
LAAALA
ALQLQA
AALQAA
ALQLQA
LAAALA
- 样例输出
3
public class h9 {//public static void show(char[][] a){// int n=a.length;
// for(int i=0;i
// for(int j=0;j
// System.out.print(a[i][j]+" ");
// System.out.println();
// }
//}
public static void main(String[] args) {Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
String[] s=new String[n];
char[][] ch=new char[n][m];
for(int i=0;ifor(int j=0;jfor(int j=1;jint zs=0,zx=0,ys=0,yx=0; //记录每个字母左上左下右上右下分别有多少个和中心字母相同
// 左上角
for(int k=1;k<=Math.min(i,j);k++) {if (ch[i][j] != ch[i - k][j - k])
break;
zs++;
}
// 左下角
for(int k=1;k<=Math.min(n-i-1,j);k++) {if (ch[i][j] != ch[i+k][j-k])
break;
zx++;
}
// 右上角
for(int k=1;k<=Math.min(i,m-j-1);k++) {if (ch[i][j] != ch[i-k][j+k])
break ;
ys++;
}
// 右下角
for(int k=1;k<=Math.min(n-i-1,m-j-1);k++) {if (ch[i][j] != ch[i+k][j+k])
break;
yx++;
}
int min=(min=(min=(zs
5 6
LAAALA
ALQLQA
AALQAA
ALQLQA
LAAALA
3
5 11
AAAAALQAALQ
AAAAAALQLQA
AAAAAAALQAA
AAAAAALQLQA
AAAAALQAALQ
15
自己做的,菜鸟一枚,可能有不少错漏之处,请大家指正。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享文章:2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现)-创新互联
网站链接:http://myzitong.com/article/dgpogj.html