A.星期计算
B.山
C.字符统计
D.最少刷题
目录
A.
这题直接求20的22次方然后对7取余,结果加上6则为答案。
public class test {
public static void main(String[] args) {
System.out.println(Math.pow(20, 22)%7);//结果为1,
}
}
答案:7
B.
这个题目考试时,没跑出来,当时只想起用字符串处理回文,不知道如何使前半部分不单调减,后半部分不单调增。后来想了下,直接暴力,分别遍历字符串的前后部分并判断是否相等即可。大概要跑个2min左右。
public class test6 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int count=0;
for(int i=2022;i<=2022222022;i++){//3138
String s=i+"";
int l=s.length();
String st=s.charAt(0)+"";
String str=s.charAt(s.length()-1)+"";
if(l%2!=0){//字符长度为奇数时
for(int j=1;j<(l+1)/2;j++){//前半部分,从前遍历
if(s.charAt(j)>=s.charAt(j)-1){
st+=s.charAt(j);
}
else{
break;
}
}
for(int j=s.length()-2;j>=(l-1)/2;j--){//后半部分,从后遍历
if(s.charAt(j)>=s.charAt(j+1)){
str+=s.charAt(j);
}
else{
break;
}
}
}
else{//字符长度为偶数时
for(int j=1;j<l/2;j++){//前半部分
if(s.charAt(j)>=s.charAt(j)-1){
st+=s.charAt(j);
}
else{
break;
}
}
for(int j=s.length()-2;j>=l/2;j--){//后半部分
if(s.charAt(j)>=s.charAt(j+1)){
str+=s.charAt(j);
}
else{
break;
}
}
}
if(st.equals(str)){//判断前后是否相等,回文
//System.out.println(st+" "+str);
count++;
}
}
System.out.println(count);//3138
}
}
答案:3138
C.
这题本来是送分题,结果在敲代码的时候,不知道如何存取,相同次数的字母,自己简直太菜了,后又想了段暴力的代码。
public class test2 {
public static void main(String[] args) {
HashSet<String> h=new HashSet<String>();//用不到,考试的时候想存放到哈希表中读取
Scanner in=new Scanner(System.in);
String str=in.next();
String ss ="";//存放字母
int count=1,con=-1;//初始数值
for(int i=0;i<str.length();i++){//依次遍历字符串
count=1;
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j)){
count++;
}
}
if(count>con){//更新数值,和字母
con=count;
ss=str.charAt(i)+"";
}
else if(count==con){//出现次数相同时,后面加上即可
ss+=str.charAt(i)+"";
}
}
System.out.print(ss);
}
}
D.
这题做的也吐了,本想通过暴力,多重判断,不过总是出现bug,到最后才想起来,利用中位数进行判断。新建一个数组,并且将输入数据的数组,和这个数组一样,然后将这个数组进行排序,遍历自己输入的数组,和中位数进行比较,小于中位数的话,就用中位数的数字减去所遍历的数字再加1.本以为写的没毛病,后面结束后,无意发现没有处理特殊的情况,当一组数据出现相同的数字时,没有考虑到。简直了,整个卷子就没拿到分。
public class test3 {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int N=in.nextInt();
int[]arr=new int[N];//输入的数组
int[]arr1=new int[N];//临时数组来进行排序
int[]tm=new int[N];//存放要刷题目的数组
for(int i=0;i<arr.length;i++){
arr[i]=in.nextInt();
}
for(int i=0;i<arr1.length;i++){//将初始的数组赋值给新建数组
arr1[i]=arr[i];
}
Arrays.sort(arr1);
int l=arr1.length;
if(l%2!=0){//数据大小为奇数时
for(int i=0;i<arr.length;i++){
if(arr[i]>=arr1[(l+1)/2-1]){//数据小于中位数时
tm[i]=0;
}
else{
tm[i]=arr1[(l+1)/2-1]-arr[i]+1;
}
}
}
else{//数据大小为偶数时
for(int i=0;i<arr.length;i++){
if(arr[i]>=arr1[(l)/2]){
tm[i]=0;
}
else{
tm[i]=arr1[l/2]-arr[i];//!!!在这里不用再加一,考试时处理错了,呜呜呜
}
}
}
for(int i=0;i<tm.length;i++){
System.out.print(tm[i]+" ");
}
}
}
下面的题目当时也没做出来,后续有见解第一时间更。第一次参加蓝桥杯,做的什么也不是,也难怪自己还是个大一的小菜b。本次就无缘了,全当陪跑喽~~