2021年第十二届蓝桥杯国赛javaB组真题及解析

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);
			
		}
	}

待更。。。。

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值