# 2022藍橋杯b組 ## A題 ![img](https://img-blog.csdnimg.cn/4ac63a09fe784d7a94b710fc0cc48d09.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50, ...
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)是數字形式,直接轉字元