2021年第十二届蓝桥杯国赛javaB组

试题A: 整数范围
试题B: 纯质数
试题C: 完全日期
试题D: 最小权值
试题E: 大写
试题F: 123
试题G: 和与乘积
试题H: 巧克力
试题I: 翻转括号序列
试题J: 异或三角

试题A: 整数范围
本题总分:5 分
【问题描述】
  用8位二进制(一个字节)来表示一个非负整数,表示的最小值是0,则一般能表示的最大值是多少?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:255

试题B: 纯质数
本题总分:5 分
【问题描述】

如果一个正整数只有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中,有多少个纯质数?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:1903

试题C: 完全日期
本题总分:10 分
【问题描述】

如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。
  例如: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日中,一共有多少个完全日期?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:977

试题D: 最小权值
本题总分:10 分
【问题描述】

对于一棵有根二叉树T,小蓝定义这棵树中结点的权值W(T)如下:
  空子树的权值为0。
  如果一个结点v有左子树L,右子树R,分别有C(L)和C®个结点,则:
    W(v) = 1 + 2W(L) + 3W® +(C(L))2C®。
  树的权值定义为树的根结点的权值。
  小蓝想知道,对于一棵有2021个结点的二叉树,树的权值最小可能是多少?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:______

试题E: 大写
时间限制: 1.0s  内存限制: 512.0MB  本题总分:15分
【问题描述】

给定一个只包含大写字母和小写字母的字符串,请将其中所有的小写字母转换成大写字母后将字符串输出。

【输入格式】
输入一行包含一个字符串
【输出格式】
输出转换成大写后的字符串。
【样例输入1】
LanQiao
【样例输出1】
LANQIAO
【评测用例规模与约定】
对于所有评测用例,字符串的长度不超过100。

方法一:使用java的String类自带的转换大小写的toUpperCase()方法。
import java.util.Scanner; public class Main { public static void main(String[]
args) { Scanner input = new Scanner(System.in); String a = input.next(); String
b= a.toUpperCase(); System.out.println(b); } }
方法二:
import java.util.*; public class Main { public static void main(String[] args)
{ Scanner input = new Scanner(System.in); String a = input.next(); String daxie=
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String xiaoxie="abcdefghijklmnopqrstuvwxyz"; int
len=a.length(); for(int i=0;i<len;i++) { for(int j=0;j<26;j++) { if(a.charAt(i)
==daxie.charAt(j)) { System.out.print(daxie.charAt(j)); break; } else if(a.
charAt(i)==xiaoxie.charAt(j)) { System.out.print(daxie.charAt(j)); break; } } }
} }
试题F: 123
时间限制: 5.0s   内存限制: 512.0MB   本题总分:15分
【问题描述】

小蓝发现了一个有趣的数列,这个数列的前几项如下:
    1, 1, 2, 1, 2, 3, 1, 2, 3, 4, …
  小蓝发现,这个数列前1项是整数1,接下来2项是整数1至2,接下来3项是整数1至3,接下来4项是整数1至4,依次类推。
  小蓝想知道,这个数列中,连续一段的和是多少。

【输入格式】
输入的第一行包含一个整数T,表示询问的个数。
接下来T行,每行包含一组询问,其中第i行包含两个整数li和ri,表示询问数列中第li个数到第ri个数的和。
【输出格式】
输出T行,每行包含一个整数表示对应询问的答案。
【样例输入】
3
1 1
1 3
5 8
【样例输出】
1
4
8
【评测用例规模与约定】

只能拿到70%的分。。。。。。
import java.util.*; public class Main { public static void main(String[] args)
{ Scanner input = new Scanner(System.in); int xunwencishu=input.nextInt(); int
left[]=new int[xunwencishu]; int right[]=new int[xunwencishu]; int max=0;
//表示对该序列询问的最大长度,以该值确定序列的大致长度,当然应该也可以不用考虑这个。。 for(int i=0;i<xunwencishu;i++) {
left[i]=input.nextInt(); if(left[i]>max) { max=left[i]; } right[i]=input.nextInt
(); if(right[i]>max) { max=right[i]; } } int xulie []=new int[max+1]; int index=
0; //根据题意,初始化序列。 for(int i=1;index<=max;i++) { for(int j=1;j<=i;j++) { if(index
<=max) xulie[index++]=j; } } for(int i=0;i<xunwencishu;i++) { int sum=0; for(int
j=left[i]-1;j<=right[i]-1;j++) { sum+=xulie[j]; } System.out.println(sum); } }
}
试题G: 和与乘积

一种解法:
应该拿不了满分。。。。 import java.util.*; public class Main { public static void main(
String[] args) { public static void main(String[] args) { Scanner input = new
Scanner(System.in); int n=input.nextInt(); int a[]=new int[n]; for(int i=0;i<n;i
++) { a[i]=input.nextInt(); } int count=0; int ji=1; int sum=0; for(int i=0;i<n;
i++) { ji=1; sum=0; for(int j=i;j<n;j++) { ji*=a[j]; sum+=a[j]; if(sum==ji) {
count++; } } } System.out.println(count); } }
待更。。。。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信