Java-2022年第十三届蓝桥杯java B组
创始人
2024-06-02 04:14:25
0

Java-2022年第十三届蓝桥杯java B组

  • 试题A:星期计算
    • 思路与题解
  • 试题B:山
    • 思路与题解
  • 试题C:字符统计
    • 思路与题解
  • 试题D:最少刷题数
    • 思路与题解

试题A:星期计算

本题总分:5 分
【问题描述】
已知今天是星期六,请问 20^{22}天后是星期几?注意用数字 1 到 7 表示星期一到星期日。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

思路与题解

A题显然是个签到题,很多人第一思路就是“取余”,思路没错,但是如果直接暴力取余,那你就格局小了,哥们!
因为20的22次幂(大于288)明显不在long类型的范围内【(263)-1】,那么就要分步骤做取余运算:
根据公式: (a * b) % p = (a % p * b % p) % p
20^22相当于22个20做了21次乘法运算,所以我的思路是把每一次乘法的结果取余,这样,别说是long可以装得下,就算是int也手拿把掐了!

	public static void Java_B_A(){int n = 20;for(int i=0;i<21;i++)n = (20*n)%7;System.out.println((n+5)%7+1);	}

最终结果:7 ,即星期日。

试题B:山

本题总分:5 分
【问题描述】
这天小明正在学数数。他突然发现有些正整数的形状像一座“山”,比如 123565321、145541,它们左右对称(回文)且数位上的数字先单调不减,后单调不增。
小明数了很久也没有数完,他想让你告诉他在区间 [2022, 2022222022] 中有多少个数的形状像一座“山”。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

思路与题解

直接暴力遍历,并判断条件,时间有点长但好用。

	public static void Java_B_B(){int sum = 0;for(int i=2022;i<=2022222022;i++) {if(isUp(i)&&isMirror(i)) {sum++;}}System.out.println(sum);}public static boolean isMirror(int num){StringBuffer str = new StringBuffer(num+"");if((str.toString()).equals(str.reverse().toString()))return true;return false;}public static boolean isUp(int num){String st=num+"";int len=st.length()%2==0?st.length()/2:st.length()/2+1;for(int i=1;iif(st.charAt(i)return false;}}return true;}

最终结果:3138 。

试题C:字符统计

时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分
【问题描述】
给定一个只包含大写字母的字符串 S ,请你输出其中出现次数最多的字母。如果有多个字 母均出现了最多次,按字母表顺序依次输出所有这些字母。
【输入格式】
一个只包含大写字母的字符串 S .
【输出格式】
若干个大写字母,代表答案。
【样例输入】
BABBACAC
【样例输出】
AB
【评测用例规模与约定】
对于 100% 的评测用例,1 ≤ |S | ≤ .

思路与题解

本题运用Java的集合框架很容易解决。首先遍历字符串,把其中的每一种字母以键值对<字母种类,出现次数>的形式保存到HashMap中,然后遍历map提取出出现次数最多的n个字母,把它们存到list列表中,利用Collections工具类把list中字母排序,最后输出打印。

	public static void Java_B_C(){Scanner scanner = new Scanner(System.in);String input = scanner.next();HashMap mp = new HashMap();for(int i=0;ichar ch = input.charAt(i);if (mp.get(ch) != null)mp.put(ch, (mp.getOrDefault(ch, 0)) + 1);elsemp.put(ch, 1);}int maxNum = Integer.MIN_VALUE;List list = new ArrayList();for(Character c:mp.keySet()){if(mp.get(c)>=maxNum){maxNum = mp.get(c);list.add(c);}}Collections.sort(list);for(Character ch:list){System.out.print(ch);}}

试题D:最少刷题数

时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分
【问题描述】
小蓝老师教的编程课有 N 名学生,编号依次是 1 . . . N。第 i 号学生这学期刷题的数量是 。
对于每一名学生,请你计算他至少还要再刷多少道题,才能使得全班刷题比他多的学生数不 超过刷题比他少的学生数。
【输入格式】
第一行包含一个正整数 N。
第二行包含 N 个整数: ,. . . , .
【输出格式】
输出 N 个整数,依次表示第 1 . . . N 号学生分别至少还要再刷多少道题。
【样例输入】
5
12 10 15 20 6
【样例输出】
0 3 0 0 7
【评测用例规模与约定】
对于 30% 的数据,1 ≤ N ≤ 1000, 0 ≤ ≤ 1000.
对于 100% 的数据,1 ≤ N ≤ 100000, 0 ≤ ≤ 100000.

思路与题解

对输入的刷题数进行排序;
分情况考虑:奇数情况下,超过中间值才能满足全班刷题比他多的学生数不超过刷题比他少的学生数;偶数情况下需要等于中间偏大的值就可以满足条件。

	public static void Java_B_D() {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int[] nums = new int[n];int[] count = new int[n];for (int i = 0; i < nums.length; i++) {// 输入的一个数组,并把这个数组复制下来nums[i] = scan.nextInt();count[i] = nums[i];}// 个数组排一下序方便找到较中间的那个数Arrays.sort(count);// 找到中间的索引int index = 0;// 分情况讨论值if (n % 2 == 0) {index = n / 2 + 1;} else {index = n / 2;}// 找到中间值int middle = count[index];for (int i = 0; i < n; i++) {// 判断得到最终结果if (nums[i] < middle) {System.out.print(middle - nums[i] + 1);System.out.print(" ");} else {System.out.print(0);System.out.print(" ");}}}

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...