其他分享
首页 > 其他分享> > 2020年第十二届蓝桥杯第一场校模拟赛

2020年第十二届蓝桥杯第一场校模拟赛

作者:互联网

文章目录


以下均为个人想法和解题思路,如有错误或不足,欢迎指正。


试题 A

本题总分:5 分

如果整数 a 是整数 b 的整数倍,则称 b 是 a 的约数。
请问,有多少个正整数是 2020 的约数。

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

个人答案:12

个人代码:


public class _12_XX1_B_试题A {
	
	public static void main(String[] args) {
		int res = 0;
		for(int i=1; i<=2020; ++i) 
			if(2020%i==0) ++res;
		System.out.println(res);
	}

}

解题思路:


试题 B

本题总分:5 分

如果一个 mp3 文件占用磁盘的大小是 4MB,小蓝的硬盘还剩下 100GB 的空间,请问他还可以放多少个这样的 mp3 文件?

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

个人答案:25600

个人代码:


public class _12_XX1_B_试题B {
	
	public static void main(String[] args) {
		System.out.println(100*1024/4);
	}

}

解题思路:


试题 C

本题总分:10 分

一个包含 2020 个结点的无向图,如果图中没有自环和重边,最多包含多少条边?

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

个人答案:2039190

个人代码:


public class _12_XX1_B_试题C{
	
	public static void main(String[] args) {
		System.out.println(2019*2020/2);
	}
	
}

解题思路:第一个结点能与剩余2019个结点连2019条边,第二个结点能与剩余2018个结点连2018条边,第三个结点能与剩余2017个结点连2017条边,…,因此结果为(2019+2018+2017+…+2+1)= 2019*(2019+1)/2 = 2019*2020/2


试题 D

本题总分:10 分

整数 1 到 6 连在一起,成为 123456,长度为 6。
整数 1 到 12 连在一起,成为 123456789101112,长度为 15。
请问整数 1 到 2020 连在一起,长度为多少?

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

个人答案:6973

个人代码:


public class _12_XX1_B_试题D {
	
	public static void main(String[] args) {
		int res = 0;
		for(int i=1; i<=2020; ++i) 
			res += new String(i+"").length();
		System.out.println(res);
	}

}


解题思路:


试题 E

本题总分:15 分

在一个序列 a = (a[1], a[2], …, a[n]) 中,如果 (i, j) 满足 i < j 且 a[i] > a[j],则称为一个逆序对。
例如:(3, 2, 2, 1) 中包含 6 个逆序对。(注:题目是网上拿的,不能保证其正确性,这里的6个逆序对应该是不正确的,应该为5个)
请问,(87, 39, 35, 1, 99, 10, 54, 1, 46, 24, 74, 62, 49, 13, 2, 80, 24, 58, 8, 14, 83, 23, 97, 85, 3, 2, 86, 10, 71, 15) 中包含多少个逆序对?

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

个人答案:217

个人代码:


public class _12_XX1_B_试题E {
	
	public static void main(String[] args) {
		int[] r = new int[] {87, 39, 35, 1, 99, 10, 54, 1, 46, 24, 74, 62, 49, 13, 2, 80, 24, 58, 8, 14, 83, 23, 97, 85, 3, 2, 86, 10, 71, 15};
		int res = 0;
		for(int i=0; i<r.length; ++i)
			for(int j=i+1; j<r.length; ++j)
				if(r[i]>r[j]) ++res;
		System.out.println(res);
	}

}

解题思路:


试题 F

时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分

给定一个三角形的底边长度 l 和高度 h,求三角形的面积。

输入的第一行包含一个整数 l,表示三角形的底边长度。
第二行包含一个整数 h,表示三角形的高。

输出一个数,表示三角形的面积。如果面积为整数,请直接输出这个整数,不带小数点。如果面积不是整数,请四舍五入保留正好一位小数。

5
6

15

5
3

7.5

对于所有评测用例,1 <= l, h <= 100。

个人代码:


import java.util.Scanner;

public class _12_XX1_B_试题F {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		double res = sc.nextInt()*sc.nextInt()/2.0;
		System.out.println(res == (int)(res) ? (int)res : String.format("%.1f", res));
	}

}

解题思路:


试题 G

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

小蓝正在上小学,老师要求同学们在暑假每天记日记。
可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。
没想到,日记很快就被老师发现了问题,原来小蓝记完8月31日的日记,竟又记了8月32日和8月33日的日记。
这显然是有问题的,因为根本没有8月32日和8月33日。
给定一个月份和一个日期,请问2021年有没有这一天。

输入的第一行包含一个整数 m,表示月份。
第二行包含一个整数 d,表示日期。

如果2021年有 m 月 d 日,输入 yes,否则输出 no。

8
32

no

2
28

yes

对于所有评测用例,1 <= m <= 20,1 <= d <= 40。

个人代码:


import java.util.Scanner;

public class _12_XX1_B_试题G {
	static int[] r = new int[] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	
	public static void main(String[] args) {
		if(2021%4==0 && 2021%100!=0 || 2021%400==0) ++r[2];			
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt(), d = sc.nextInt();
		if(r[m]>=d)
			System.out.println("yes");
		else
			System.out.println("no");
	}

}

解题思路:


试题 H

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

给定一个单词,请问在单词中删除 t 个字母后,能得到的字典序最小的单词是什么?

输入的第一行包含一个单词,由大写英文字母组成。
第二行包含一个正整数 t。

输出一个单词,表示答案

LANQIAO
3

AIAO

对于所有评测用例,单词长度不超过 100,t 小于单词长度。

个人代码:


import java.util.Scanner;

public class _12_XX1_B_试题H {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char[] ch = sc.next().toCharArray();
		int t = sc.nextInt(), n = ch.length-t, si = -1;
		for(int i=n; i>0; --i) {
			++si;
			char ct = 'Z';
			for(int j=si; j<ch.length-i+1; ++j) {
				if(ch[j] < ct) {
					si = j;
					ct = ch[j];
				}
			}
			System.out.print(ch[si]);
		}
	}
}

解题思路:


试题 I

时间限制: 3.0s 内存限制: 512.0MB 本题总分:25 分

给定一个序列 a_1, a_2, …, a_n。其中 a_1 < a_2 < … < a_n。
相邻两个数之间的差(后一个数减前一个数)称为它们的间隙。
请问序列中最大的间隙值是多少?

输入的第一行包含一个整数 n,表示序列的长度。
第二行包含 n 个正整数,为给定的序列。

输出一个整数,表示序列中最大的间隙值。

5
1 3 8 9 12

5

对于所有评测用例,1 <= n <= 1000,1 <= a_i <= 100000。

个人代码:


import java.util.Scanner;

public class _12_XX1_B_试题I {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int a = sc.nextInt(), b, res = 0;
		for(int i=1; i<n; ++i) {
			b = sc.nextInt();
			res = Math.max(res, b-a);
			a = b;
		}
		System.out.println(res);
	}

}

解题思路:


试题 J

时间限制: 5.0s 内存限制: 512.0MB 本题总分:25 分

小蓝有黄绿蓝三种颜色的小球,分别为 R, G, B 个。同样颜色的小球没有区别。
小蓝将这些小球从左到右排成一排,排完后,将最左边的连续同色小球个数记为 t_1,将接下来的连续小球个数记为 t_2,以此类推直到最右边的小球。
请问,总共有多少总摆放小球的方案,使得 t_1, t_2, … 为严格单调递增序列,即 t_1 < t_2 < t_3 < …

输入一行包含三个整数 R, G, B。

输出一个整数,表示答案。

3 6 0

3

用 r 表示红球,g 表示绿球,可能的方案包括:
rrrgggggg
grrrggggg
ggrrrgggg

2 4 6

3

用 r 表示红球,g 表示绿球,b 表示蓝球,可能的方案包括:
rrggggbbbbbb
grrgggbbbbbb
brrggggbbbbb

对于30%的评测用例,1 <= R, G, B <= 10;
对于60%的评测用例,1 <= R, G, B <= 30;
对于所有评测用例,1 <= R, G, B <= 50。
  
个人代码:


import java.util.Scanner;

public class _12_XX1_B_试题J {
	static int[] r = new int[3];
	static int total, res = 0;
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		r[0] = sc.nextInt();
		r[1] = sc.nextInt();
		r[2] = sc.nextInt();
		total = r[0]+r[1]+r[2];
		dfs(total, 0, -1);
		System.out.println(res);
	}
	
	public static void dfs(int sum, int x, int last) {
		if(sum == 0) {
			++res;
			return ;
		}
		for(int i=0; i<3; ++i) {
			if(i == last) continue;
			for(int j=x+1; j<=r[i]; ++j) {
				r[i] -= j;
				if(sum>=j)dfs(sum - j, j, i);
				r[i] += j;
			}
		}
	}

}


标签:试题,第十二届,int,res,样例,蓝桥,2020,sc,public
来源: https://blog.csdn.net/weixin_45640260/article/details/113358751