2022蓝桥杯B组(java)版
作者:全栈工程师cgy
本文为作者原创,转载请注明出处:https://www.cnblogs.com/cgy-chen/p/17545840.html
2022蓝桥杯b组
A题
import java.math.BigInteger; public class A { public static void main(String[] args) { BigInteger bigInteger=new BigInteger("20");//高精度 BigInteger a=new BigInteger("1"); for (int i = 0; i < 22; i++) { a=a.multiply(bigInteger);//multiply是java中乘的意思 } BigInteger c=new BigInteger("7"); a=a.remainder(c);//remainder取余 System.out.println(a); } }
这道题的重点在于利用java中得天独厚的高精度BigInteger直接生成20,然后22遍遍历得到结果,题目简单易上手
B
问题描述
这天小明正在学数数。他突然发现有些正整数的形状像一座“山”,比如 123565321、145541,它们左右对称(回文)且数位上的数字先单调不减,后单调不增。小明数了很久也没有数完,他想让你告诉他在区间 [2022, 2022222022] 中有多少个数的形状像一座“山”。
public class B3 { public static void main(String[] args) { //记录满足条件的个数 int count = 0; for (int i = 2022; i <= 2022222022; i++) { //int -> String String s = i + ""; //String -> char[] char[] t = s.toCharArray(); if (pdhws(t)) { if (pdsw(t)) { System.out.println(t); count++; } } } System.out.println(count); } /** * 判断是否是回文数 * * @param t * @return */ public static boolean pdhws(char[] t) { boolean flag = true; int mid = t.length / 2; for (int j = 0; j < mid; j++) { if (t[j] == t[t.length - j - 1]) { flag = true; } else { flag = false; return flag; } } return flag; } /** * 是否是先单调不减,后单调不增 * * @param t * @return */ public static boolean pdsw(char[] t) { boolean flag = true; int mid = t.length / 2; for (int j = 0; j < mid; j++) { if (t[j] <= t[j + 1]) {//因为取一半,所以只需要判断单调不减或单调不增就可以 flag = true; } else { flag = false; return flag; } } return flag; } }
这道题目考验回文数,通过遍历暴力得出回文数的个数
涉及到回文数的判断题条件,首先遍历时,只需要遍历一半,因为两边对称,最好去动手实践一次
然后就是判断是否是只增不减或只减不增
C
试题 C: 字符统计
时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分
【问题描述】
给定一个只包含大写字母的字符串 S,请你输出其中出现次数最多的字母。
如果有多个字母均出现了最多次,按字母表顺序依次输出所有这些字母。
【输入格式】
一个只包含大写字母的字符串 S .
【输出格式】
若干个大写字母,代表答案。
【样例输入】
BABBACAC
【样例输出】
AB
【评测用例规模与约定】
对于 100% 的评测用例,1 ≤ |S | ≤ 10的6次方
import java.util.Scanner; public class C { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String s=sc.nextLine(); char[]chars=s.toCharArray(); int[]arr=new int[26]; for (int i = 0; i < chars.length; i++) { arr[chars[i]-'A']++; } /* System.out.println(Arrays.toString(arr));*/ //记录最大出现次数max int max=arr[0]; for (int i = 0; i < arr.length; i++) { if(arr[i]>max){ max=arr[i]; } } for (int i = 0; i < arr.length; i++) { if(max==arr[i]){ System.out.print((char)('A'+i)); } } } }
这道题的思路在于,首先通过S读入字符,然后通过java中的格式,将其转化为字符数组
建立一个新数组,由于java中字符能直接加减的形式,进行计算
'A'-'B'=1
arr[i]++;数组内值增加
最后就是(char)("A"+i) ('A'+i)是数字形式,直接转字符
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?