2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)

蓝桥杯历年真题及解析.

目录:

    • 蓝桥杯历年真题及解析.
      • A:门牌制作(难度:★)
        • 题目:
        • 分析:
        • 代码:
      • B:既约分数(难度:★★)
        • 题目:
        • 分析:
        • 代码:
      • C:蛇形填数(难度:★★)
        • 题目:
        • 分析:
        • 代码:
      • D:七段码(难度:★★★)
        • 题目:
        • 分析:
        • 代码:
      • E:平面分割(难度:★★★★)
        • 题目:
        • 分析:
        • 代码:
      • F:成绩分析(难度:★)
        • 题目:
        • 分析:
        • 代码:
      • G:回文日期(难度:★★★)
        • 题目:
        • 分析:
        • 代码:
      • H:子串分值(难度:★★★★)
        • 题目:
        • 分析:
        • 代码:
      • I:荒岛探测(难度:★★★★★)
        • 题目:
        • 分析:
        • 代码:
      • J:字串排序(难度:★★★★★)
        • 题目:
        • 分析:
        • 代码:
      • 算法交流群

A:门牌制作(难度:★)

题目:

2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第1张图片

分析:

for循环模拟计算过程即可。
答案=624

代码:
public class A门牌制作 {
	public static void main(String[] args) {
		int ans=0;
		for(int i=1;i<=2020;i++){
			int temp=i;
			while(temp!=0){
				if(temp%10==2)ans++;
				temp/=10;
			}
		}
		System.out.println(ans);
	}
}

B:既约分数(难度:★★)

题目:

2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第2张图片

分析:

枚举所有分子分母,求GCD,最终去重,
剩余的个数即为结果。
答案=2481215

代码:
import java.util.HashSet;

public class B既约分数 {
	public static int gcd(int x,int y){
		if(y==0)return x;
		else return gcd(y,x%y);
	}
	public static void main(String[] args) {
		int ans=0;
		HashSet<Integer> set[]=new HashSet[2021];
		for(int i=1;i<=2020;i++){
			set[i]=new HashSet<Integer>();
			for(int j=1;j<=2020;j++){
				int t=gcd(i,j);
				set[i/t].add(j/t);
			}
		}
		for(int i=1;i<=2020;i++){
			ans+=set[i].size();
		}
		System.out.println(ans);
	}
}

C:蛇形填数(难度:★★)

题目:

2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第3张图片

分析:

根据数据找规律,
把矩阵看作从左下角到右上角,或者右上角到左下角的斜线,
那么,第n行,第n列,所对应的斜线为第2n-1条,
说明有2
n-2条完整的斜线,每条斜线长度从一开始递增,每次+1,
即完整斜线上所有的数字总数为( 1 + 2 * n - 2 ) * ( 2 * n - 2 ) / 2;
剩下半条斜线上有n个数字,
即公式为( 1 + 2 * n - 2 ) * ( 2 * n - 2 ) / 2 + n;
答案=761

代码:
public class C蛇形填数 {
	public static void main(String[] args) {
		int n=20;
		System.out.println((1+2*n-2)*(2*n-2)/2+n);
	}
}

D:七段码(难度:★★★)

题目:

2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第4张图片

分析:

七个块,当作二进制进行枚举,一共128种可能,挨个找即可。
答案=80

代码:
public class D七段码 {
	public static void main(String[] args) {
		System.out.println(80);
		//手查的
	}
}

E:平面分割(难度:★★★★)

题目:

2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第5张图片

分析:

//待更新

代码:

F:成绩分析(难度:★)

题目:

2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第6张图片
2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第7张图片
2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第8张图片

分析:

按照题目所说进行模拟运算即可。

代码:

在这里插入图片描述

import java.util.Scanner;

public class F成绩分析 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int max=0,min=Integer.MAX_VALUE;
		double sum=0;
		for(int i=0;i<n;i++){
			int t=sc.nextInt();
			max=Math.max(max, t);
			min=Math.min(min, t);
			sum+=t;
		}
		System.out.println(max);
		System.out.println(min);
		System.out.println(String.format("%.2f", sum/n));
	}
}

G:回文日期(难度:★★★)

题目:

2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第9张图片
2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第10张图片

在这里插入图片描述

分析:

将时间获取到,分割为年月日,
三层循环嵌套时间枚举,对每种情况检查,符合条件即记录,找到答案结束程序即可。

代码:

在这里插入图片描述

import java.util.Scanner;

public class G回文日期 {
	public static int tian[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	public static void isr(int x){
		tian[2]=((x%4==0&&x%100!=0)||(x%400==0))?29:28;
	}
	public static boolean check(String s){
		return s.equals(new StringBuilder(s).reverse().toString());
	}
	public static boolean check2(String s){
		return s.charAt(0)==s.charAt(2)&&s.charAt(0)==s.charAt(5)&&s.charAt(0)==s.charAt(7)
				&&s.charAt(1)==s.charAt(3)&&s.charAt(1)==s.charAt(4)&&s.charAt(1)==s.charAt(6);
	}
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int year=n/10000,month=(n%10000)/100,day=n%100;
		boolean first=true,line1=false,line2=false;
		String str1="",str2="";
		for(int i=year;i<=9999;i++){
			isr(i);
			for(int j=first?month:1;j<=12;j++){
				for(int k=first?day:1;k<=tian[j];k++){
					if(first){
						first=false;
						continue;
					}
					if(!line1&&check(i+""+(j<10?"0"+j:j)+""+(k<10?"0"+k:k))){
						str1=i+""+(j<10?"0"+j:j)+""+(k<10?"0"+k:k);
						line1=true;
					}
					if(!line2&&check2(i+""+(j<10?"0"+j:j)+""+(k<10?"0"+k:k))){
						str2=i+""+(j<10?"0"+j:j)+""+(k<10?"0"+k:k);
						line2=true;
					}
					if(line1&&line2){
						System.out.println(str1);
						System.out.println(str2);
						return ;
					}
				}
			}
		}
	}
}

H:子串分值(难度:★★★★)

题目:

2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第11张图片
2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第12张图片
2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第13张图片

分析:

我们可以通过计算每个字母所产生的贡献进行计算,观察发现,
某字母x与左边x的距离乘以与右边x的距离即为该字母产生的贡献,
记录左边距离left,记录右边距离right
ans=Σ(left[i]*right[i])

代码:

在这里插入图片描述

import java.util.Scanner;

public class H子串分值 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		char c[]=sc.next().toCharArray();
		int left[]=new int[c.length];
		int right[]=new int[c.length];
		int buf[]=new int[26];
		for(int i=0;i<26;i++)buf[i]=-1;
		for(int i=0;i<c.length;i++){
			left[i]=i-buf[c[i]-'a'];
			buf[c[i]-'a']=i;
		}
		for(int i=0;i<26;i++)buf[i]=c.length;
		for(int i=c.length-1;i>=0;i--){
			right[i]=buf[c[i]-'a']-i;
			buf[c[i]-'a']=i;
		}
		long ans=0;
		for(int i=0;i<c.length;i++){
			ans+=left[i]*right[i];
		}
//		System.out.println(Arrays.toString(left));
//		System.out.println(Arrays.toString(right));
		System.out.println(ans);
	}
}

I:荒岛探测(难度:★★★★★)

题目:

//无题源

分析:
代码:

J:字串排序(难度:★★★★★)

题目:

//无题源

分析:
代码:

算法交流群

2020第十一届蓝桥杯第二场省赛JAVA A组真题解析(带源码及解析)_第14张图片

你可能感兴趣的:(蓝桥杯,第十一届蓝桥杯,蓝桥杯,JAVA,A组,蓝桥杯历届真题,蓝桥杯真题解析)