💎蓝桥杯系列文章
2023第十四届蓝桥杯校内模拟赛第三期个人题解(Java实现)
蓝桥杯真题——单词分析(Java实现)
💎前言
这篇文章为个人题解,假如我写的解法有误,欢迎大家在评论区指正👏👏!!!希望这篇文章对你有帮助❤❤
💎填空题
🎯问题1:大于 2022 的最小数
请找到一个大于 2022 的最小数,这个数转换成二进制之后,最低的 6 个二进制为全为 0 。
请将这个数的十进制形式作为答案提交。
💡Java代码
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 的数,最小的满足这样条件的数是多少?
💡Java代码
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能拆分为多个质数之和,请问最多能拆分为多少个?
💡Java代码
public class h5 {
// 判断数字是否为质数
public static boolean iszhishu(int n){
for(int i=2;i<n;i++){
if(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
💡Java代码
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 行,每行包含一个由小写字母组成的单词。
输出格式
请输出去除重复后的那些单词。如果一个单词出现了多遍,请保留第一次出现的单词,去除之后出现的单词,按输入的顺序输出。
样例输入
lanqiao
hi
hello
hello
lanqiao
样例输出
lanqiao
hi
hello
💡Java代码
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;i<n;i++)
s[i]=sc.next();
ArrayList<String> list1=new ArrayList<>(Arrays.asList(s));
LinkedHashSet<String> hashSet=new LinkedHashSet<>(list1); //集合自动去重
ArrayList<String> list2=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
样例输入java noon
样例输出java noon
💡Java代码
public class h8 {
//判断是否是回文串
public static boolean ishuiwen(String s){
int n=s.length();
int l=0,r=n-1;
while(l<r){
if(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
💡Java代码
public class h9 {
//public static void show(char[][] a){
// int n=a.length;
// for(int i=0;i<a.length;i++){
// for(int j=0;j<a[0].length;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;i<n;i++)
s[i]=sc.next();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
ch[i][j]=s[i].charAt(j);
}
//show(ch);
int count=0; //记录所有X图形个数
for(int i=1;i<n-1;i++){
for(int j=1;j<m-1;j++){
int 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<zx)?zs:zx)<ys?min:ys)<yx?min:yx; //求出四个中的最小值,即该字母可以构成多少个X图形
count+=min; //累计所有X图形个数
}
}
System.out.println(count);
}
}
💯结果
5 6
LAAALA
ALQLQA
AALQAA
ALQLQA
LAAALA
3
5 11
AAAAALQAALQ
AAAAAALQLQA
AAAAAAALQAA
AAAAAALQLQA
AAAAALQAALQ
15
💎总结
自己做的,菜鸟一枚,可能有不少错漏之处,请大家指正。临走之前,可以给个免费的点赞评论收藏+关注吗?💗💗你的支持是我创作的最大动力!!!文章来源:https://www.toymoban.com/news/detail-421940.html
文章来源地址https://www.toymoban.com/news/detail-421940.html
到了这里,关于2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!