程序员

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

作者:admin 2021-07-14 我要评论

蓝桥杯历年真题及解析 . 目录 蓝桥杯历年真题及解析. A门牌制作难度★ 题目 分析 代码 B既约分数难度★★ 题目 分析 代码 C蛇形填数难度★★ 题目 分析 代码 D七...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

蓝桥杯历年真题及解析.

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

题目:

在这里插入图片描述

分析:

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:既约分数(难度:★★)

题目:

在这里插入图片描述

分析:

枚举所有分子分母,求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:蛇形填数(难度:★★)

题目:

在这里插入图片描述

分析:

根据数据找规律,
把矩阵看作从左下角到右上角,或者右上角到左下角的斜线,
那么,第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:七段码(难度:★★★)

题目:

在这里插入图片描述

分析:

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

代码:

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

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

题目:

在这里插入图片描述

分析:

//待更新

代码:

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

题目:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析:

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

代码:

在这里插入图片描述

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:回文日期(难度:★★★)

题目:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

分析:

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

代码:

在这里插入图片描述

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:子串分值(难度:★★★★)

题目:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析:

我们可以通过计算每个字母所产生的贡献进行计算,观察发现,
某字母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:字串排序(难度:★★★★★)

题目:

//无题源

分析:

代码:

算法交流群

在这里插入图片描述

;原文链接:https://blog.csdn.net/qq_43652327/article/details/115708882

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 2020第十一届蓝桥杯第二场省赛JAVA A组

    2020第十一届蓝桥杯第二场省赛JAVA A组

  • 数据清洗

    数据清洗

  • 蚂蚁云原生应用运行时的探索和实践 - A

    蚂蚁云原生应用运行时的探索和实践 - A

  • 开发者学堂课程干货总结——Spring Clo

    开发者学堂课程干货总结——Spring Clo

腾讯云代理商
海外云服务器