2022蓝桥杯B组(java)版
2023-07-11 20:17:34 博客园
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)是数字形式,直接转字符

最新新闻: