蓝桥杯2022


第十三届蓝桥杯大赛软件类省赛(2022)

试题A:星期计算【填空题】

【问题描述】

已知今天是星期六,请问 20^22 天后是星期几?
注意用数字 1 到 7 表示星期一到星期日
import java.math.BigInteger;
/**
    如果直接求20^22再取余,20^22的结果基本类型是装不下的,所以可以在计算 20^22 的时候利用取余的运算规则先进行取余防止溢出。这个是常规的取余算法,当然还有快速幂取余法,不过对于这个题目,常规的算法就可以了
*/
public class Main {

    public static void main(String[] args) {
        int ans = 1;
        for (int i = 0; i < 22; i++) {
            // 取余7防止溢出
            ans = ans * 20 % 7;
        }
        int result = (6 + ans) % 7;
        System.out.println(result == 0 ? 7 : result);
    }
}
输出结果:7

试题 B: 山【填空题】

【问题描述】

这天小明正在学数数。
他突然发现有些正整数的形状像一座“山”,比如 123565321 、 145541 ,它们左右对称(回文)且数位上的数字先单调不减,后单调不增。
小明数了很久也没有数完,他想让你告诉他在区间[2022,2022222022]中有多少个数的形状像一座“山”。
/**
    转化成字符串求解,不过只翻转一半,大概也要花个一分多钟就可以出结果了
*/
public class Main {

    public static void main(String[] args) {
        int cnt = 0;
        for (int i = 2022; i <= 2022222022; i++) {
            if (isPalindromeAndMonotonous(i)) {
                cnt++;
            }
        }
        System.out.println(cnt);

    }

    public static boolean isPalindromeAndMonotonous(int num) {
        char[] chs = ("" + num).toCharArray();
        int start = 0;
        int end = chs.length - 1;
        while (start < end) {
            if (chs[start] != chs[end] || chs[start] > chs[start + 1]) {
                return false;
            }
            start++;
            end--;
        }
        return true;
    }
}

试题C:字符统计【编程题】

【问题描述】

给定一个只包含大写字母的字符串S,请你输出其中出现次数最多的字母。如果有多个字母均出现了最多次,按字母表顺序依次输出所有这些字母。

【输入格式】

一个只包含大写字母的字符串S.

【输出格式】

若干个大写字母,代表答案。

【样例输入】

BABBACAC

【样例输出】

AB

【代码】

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        char[] chs = scanner.nextLine().toCharArray();
        int[] counts = new int[26];
        for (int i = 0; i < chs.length; i++) {
            counts[chs[i] - 'A'] += 1;
        }
        int max = counts[0];
        String result = "A";
        for (int i = 1; i < counts.length; i++) {
            if (counts[i] > max) {
                max = counts[i];
                result = "" + (char) (i + 'A');
            } else if (counts[i] == max) {
                result += (char) (i + 'A');
            }
        }
        System.out.println(result);
    }

}

文章作者:
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 !
  目录