蓝桥杯2021国赛javaB组题目详解
第一题 整数范围
问题描述
用 8位二进制(一个字节)来表示一个非负整数,表示的最小值是 0,则一般能表示的最大值是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
code
public class 蓝桥杯2021整数范围 {
public static void main(String[] args) {
System.out.println(255);
}
}
第二题 纯质数
问题描述
如果一个正整数只有1和它本身两个约数,则称为一个质数(又称素数)。前几个质数是:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,…
如果一个质数的所有十进制数位都是质数,我们称它为纯质数。例如:2,3, 5, 7, 23, 37都是纯质数,而11, 13, 17, 19, 29, 31不是纯质数。当然1, 4, 35也不是纯质数。
请问,在1到20210605中,有多少个纯质数?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
code
import java.util.ArrayList;
public class 蓝桥杯2021纯质数 {
public static void main(String[] args) {
int N =20210605;
int count=0;
ArrayList<Integer> mylist = new ArrayList<>();
mylist.add(2);
mylist.add(3);
for(int i=2;i<=N;i++){
for(int j=2;j*j<=i;j++){
if(i%j==0){
break;
}
if((j+1)*(j+1)>i){
mylist.add(i);
}
}
}
char[] test = {'2','3','5','7'};
for(Integer s : mylist ){
int flag=1;
String str = String.valueOf(s);
for(char ch :str.toCharArray()){
for(char cht:test){
if(cht-ch==0){
break;
}
if(cht-'7'==0&&ch-'7'!=0){
flag=0;
break;
}
}
if(flag==0){
break;
}
}
if(flag==1){
count++;
}
}
System.out.println(count);
}
}
第三题 完全日期
问题描述
如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。例如: 2021 年 6 月 5 日的各位数字之和为 2 + 0 + 2 + 1 + 6 + 5 = 16,而16 是一个完全平方数,它是 4 的平方。所以 2021 年 6 月 5 日是一个完全日期。例如: 2021 年 6 月 23 日的各位数字之和为 2 + 0 + 2 + 1 + 6 + 2 + 3 = 16,是一个完全平方数。所以 2021 年 6 月 23 日也是一个完全日期。
请问,从 2001 年 1 月 1 日到 2021 年 12 月 31 日中,一共有多少个完全日期?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
code
import java.time.LocalDate;
public class 蓝桥杯2021完全日期 {
public static void main(String[] args) {
LocalDate t1 =LocalDate.of(2001, 1, 1);
LocalDate t2 =LocalDate.of(2021, 12,31);
int count=0;
while(t1.isBefore(t2)||t1.isEqual(t2)){
int a = t1.getYear();
int b = t1.getMonthValue();
int c = t1.getDayOfMonth();
int d1=0;
String a1 =String.valueOf(a);
String b1 =String.valueOf(b);
String c1 =String.valueOf(c);
for(char i:a1.toCharArray()){
d1+=Character.getNumericValue(i);
}
for(char i:b1.toCharArray()){
d1+=Character.getNumericValue(i);
}
for(char i:c1.toCharArray()){
d1+=Character.getNumericValue(i);
}
int d2 = (int)Math.sqrt(d1);
if(d1==(d2*d2)){
count++;
}
t1=t1.plusDays(1);
}
System.out.println(count);
}
}
第四题 最小权值
问题描述
对于一棵有根二叉树T,小蓝定义这棵树中结点的权值W(T)如下:空子树的权值为0。
如果一个结点v有左子树L,右子树R,分别有C(L)和C(R)个结点,则:
W(v) = 1 + 2W(L) + 3W(R) +(C(L))2C(R)。
树的权值定义为树的根结点的权值。
小蓝想知道,对于一棵有2021个结点的二叉树,树的权值最小可能是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
code
//dp
public class 蓝桥杯2021最小权值 {
static int N=2021;
static long[] map = new long[N+1];
public static void main(String[] args) {
System.out.println(dfs(N));
}
public static long dfs(int num) {
if(num==0||map[num]!=0){
return map[num];
}
long weight =Long.MAX_VALUE;
for(int lnum=0;lnum<num;lnum++){
int rnum=num-1-lnum;
long midWeight = 1+2*dfs(lnum)+3*dfs(rnum)+lnum*lnum*rnum;
weight = Math.min(weight, midWeight);
}
map[num]=weight;
return map[num];
}
}
第五题 大写
问题描述
给定一个只包含大写字母和小写字母的字符串,请将其中所有的小写字母转换成大写字母后将字符串输出。
输入格式
输入一行包含一个字符串
输出格式
输出转换成大写后的字符串。
样例输入
LanQiao
样例输出
LANQIAO
评测用例规模与约定
对于所有评测用例,字符串的长度不超过100。
code
import java.util.Scanner;
public class 蓝桥杯2021大写 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println(sc.next().toUpperCase());
sc.close();
}
}