第十届蓝桥杯JavaC组省赛真题

试题 A: 求和
本题总分:5 分
【问题描述】
小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 2019 中,所有这样的数的和是多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分

//这道题没什么好说的for循环暴力破解
public class qiuhe {//1761
	public static void main(String[] args) {
		int count=0;
		for (int i = 1; i <=2019; i++) {
			int b = i;
			while(b!=0){
				int a = b%10;
				if(a==2 || a==0||a==1||a==9){
					count++;
					break;
				}
			b/=10;
			}
		}
		System.out.println(count);
	}

}

试题 B: 矩形切割
本题总分:5 分
【问题描述】
小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。
当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方 形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。 例如,对于一块两边分别为 5 和 3 的材料(记为 5×3),小明会依次切出 3×3、2×2、1×1、1×1 共 4 个正方形。 现在小明有一块矩形的材料,两边长分别是 2019 和 324。请问小明最终会 切出多少个正方形?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

//21个正方形

这个纯手算就可以,
当一个矩形开始切割正方形的时候,
按照矩形的宽切割就能切割出最大的正方形,
一直按照这个思路,然后继续切
最后剩下的就是1*1的正方形

试题 C: 不同子串
本题总分:10 分
【问题描述】
一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。 注意在计算时,只算本质不同的串的个数。 请问,字符串0100110001010001 有多少个不同的非空子串?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

import java.util.HashSet;
import java.util.Set;


public class butongzichuan {//100
	public static void main(String[] args) {
		String s ="0100110001010001";
		Set<String> set = new HashSet<String>();       //Set最大的特点就是不能存重复的元素
		for (int i = 0; i < s.length(); i++) {                   //for循环每一种可能,加入set里面
			for (int j = i+1; j <= s.length(); j++) {
				String a = s.substring(i,j);
				set.add(a);
			}
		}
		System.out.println(set.size());            / /然后直接看set.size()的大小就可以
	}

}

试题 D: 质数
本题总分:10 分
【问题描述】
我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算 第 2019 个质数是多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

//这个题也没什么好说的,for循环暴力破解
//那个A:的意思是对后面的for进行标记,可以break A就是直接终止A的循环
//  continue A就是跳过一次A的循环

public class zhishu {          //17569
	public static void main(String[] args) {
		int count = 0;int temp = 0;
	A:	for (int i = 2; ; i++) {
			for (int j = 2; j <i; j++) {
				if(i%j==0){
					
					continue A;
				}
			}
			count++;
			if(count==2019){
				System.out.println(i);
				break;
			}
		}
	}

}

试题 E: 最大降雨量
本题总分:15 分
【问题描述】
由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。 这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 个 数字。法术一共持续 7 周,每天小明都要使用一张法术符,法术符不能重复使 用。 每周,小明施展法术产生的能量为这周 7 张法术符上数字的中位数。法术 施展完 7 周后,求雨将获得成功,降雨量为 7 周能量的中位数。 由于干旱太久,小明希望这次求雨的降雨量尽可能大,请大最大值是多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

这道题就是一个思路的问题,想到就很简单,想不到就会很难
自由分配七周的降雨量,每一周的降雨量为这一周降雨量的中位数
这七周的降雨量为这七周降雨量的中位数
我们从第七周开始算
第七周的后四位取最大值 前三位不用管 然后第七周的降雨量为46
第六周的后四位取剩下的最大值 前三位不用管 然后第六周的降雨量为45
。。。。。。
一直到第四周
因为这七周的降雨量为这七周降雨量的中位数
所以第四周的降雨量就是结果
下图
他是中位数(我这么算已经把最大的放在后面了)
前三周不用管(也就是前三行)
后四周的前三天不用管(前三列不用管)


27 28 29 30 31 32 33
20 21 22 23 24 25 26
13 14 15 16 17 18 19
10 11 12 34 35 36 37
7 8 9 38 39 40 41
4 5 6 42 43 44 45
1 2 3 46 47 48 49

试题 F: 旋转
时间限制: 1.0s 内存限制: 512.0MB
本题总分:15 分
【问题描述】
图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时 针旋转 90 度。 我们用一个 n×m 的二维数组来表示一个图片,例如下面给出一个 3×4 的 图片的例子:
1 3 5 7 9 8 7 6 3 5 9 7
这个图片顺时针旋转 90 度后的图片如下:
3 9 1 5 8 3 9 7 5 7 6 7
给定初始图片,请计算旋转后的图片。
【输入格式】
输入的第一行包含两个整数 n 和 m,分别表示行数和列数。 接下来 n 行,每行 m 个整数,表示给定的图片。图片中的每个元素(像 素)为一个值为 0 至 255 之间的整数(包含 0 和 255)。
【输出格式】
输出 m 行 n 列,表示旋转后的图片。
试题F: 旋转 7
第十届蓝桥杯大赛软件类省赛 Java 大学 C 组
【样例输入】 3 4 1 3 5 7 9 8 7 6 3 5 9 7
【样例输出】 3 9 1 5 8 3 9 7 5 7 6 7
【评测用例规模与约定】 对于 30% 的评测用例,1≤n,m≤10。 对于 60% 的评测用例,1≤n,m≤30。 对于所有评测用例,1≤n,m≤100。

//对于这种题,作者认为最好的方法就是用笔和纸在纸上写一遍
//把旋转过来的左边写一下,看看对应的是原来的哪一个坐标

import java.util.Scanner;



public class xuanzhuan {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		int [][] num = new int [n+1][m+1];
		for (int i = 1; i <=n; i++) {
			for (int j = 1; j <=m; j++) {
				num[i][j]=sc.nextInt();
			}
		}
		int [][]shu = new int [m+1][n+1];
		for (int i = 1; i <=m; i++) {
			for (int j = 1; j <=n; j++) {
				shu[i][j]=num[n-j+1][i];       //关键点在这
			}
		}
		for (int i = 1; i <=m; i++) {
			for (int j = 1; j <=n; j++) {
				System.out.print(shu[i][j]+" ");
			}
			System.out.println();
		}
	}

}

试题 G: 外卖店优先级
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】
“饱了么”外卖系统中维护着 N 家外卖店,编号 1 ∼ N。每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0。 每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减 到 0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加 2。 如果某家外卖店某时刻优先级大于 5,则会被系统加入优先缓存中;如果 优先级小于等于 3,则会被清除出优先缓存。 给定 T 时刻以内的 M 条订单信息,请你计算 T 时刻时有多少外卖店在优 先缓存中。
【输入格式】 第一行包含 3 个整数 N、M 和 T。 以下 M 行每行包含两个整数 ts 和 id,表示 ts 时刻编号 id 的外卖店收到 一个订单。
【输出格式】
输出一个整数代表答案。
【样例输入】 2 6 6 1 1 5 2 3 1 6 2 2 1 6 2
试题G: 外卖店优先级 9
第十届蓝桥杯大赛软件类省赛 Java 大学 C 组
【样例输出】 1
【样例解释】 6 时刻时,1 号店优先级降到 3,被移除出优先缓存;2 号店优先级升到 6, 加入优先缓存。所以是有 1 家店 (2 号) 在优先缓存中。
【评测用例规模与约定】 对于 80% 的评测用例,1≤ N,M,T ≤10000。 对于所有评测用例,1≤ N,M,T ≤100000,1≤ts≤T,1≤id ≤ N。

这道题可以用map来写,map可以自定义下标, 如果直接加入值的话可能出现缺少问题 因为同一时间可能会有好几家店都有新订单 然后把他的值做成一个List集合,(用泛型指定以下就可以) 然后就是一些判断了 具体,看代码,不懂得在下面评论
import java.util.ArrayList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap;

public class waimaidianyouxianji {
	static Scanner in = new Scanner(System.in);
	static int n, m, t;
	static Map<Integer, ArrayList<Integer>> map = new TreeMap<Integer, ArrayList<Integer>>();
	static int result;

	public static void main(String[] args) {
		n = in.nextInt();
		m = in.nextInt();
		t = in.nextInt();
		for (int i = 1; i <= m; ++i) {
			int time = in.nextInt();
			int id = in.nextInt();
			if (map.containsKey(id)) {
				map.get(id).add(time);
			} else {
				ArrayList<Integer> temp = new ArrayList<Integer>();
				temp.add(time);
				map.put(id, temp);
			}
		}

		ArrayList<Map.Entry<Integer, ArrayList<Integer>>> list = new ArrayList<Map.Entry<Integer, ArrayList<Integer>>>(
				map.entrySet());
		for (int i = 0; i < list.size(); ++i) {
			Entry<Integer, ArrayList<Integer>> entry = list.get(i);
			ArrayList<Integer> list2 = entry.getValue();
			int num = 0;
			int[] count = new int[t + 2];
			boolean flag = false;
			for (int j = 0; j < list2.size(); ++j)
				count[list2.get(j)]++;

			for (int j = 1; j <= t; ++j) {
				if (count[j] == 0) {
					if (num > 0)
						num--;
					if (num <= 3)
						flag = false;
				} else {
					num += count[j] * 2;
					if (num > 5)
						flag = true;
				}
			}
			if (flag)
				result++;
		}
		System.out.println(result);
	}

}

试题 H: 人物相关性分析
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】
小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob 有多少次同时出现。 更准确的说,小明定义 Alice 和 Bob“同时出现”的意思是:在小说文本 中 Alice 和 Bob 之间不超过 K 个字符。 例如以下文本: ThisisastoryaboutAliceandBob.AlicewantstosendaprivatemessagetoBob. 假设 K = 20,则 Alice 和 Bob 同时出现了 2 次,分别是”Alice and Bob” 和”Bob. Alice”。前者 Alice 和 Bob 之间有 5 个字符,后者有 2 个字符。 注意: 1. Alice 和 Bob 是大小写敏感的,alice 或 bob 等并不计算在内。 2. Alice 和 Bob 应为单独的单词,前后可以有标点符号和空格,但是不能 有字母。例如 Bobbi 並不算出现了 Bob。
【输入格式】
第一行包含一个整数 K。 第二行包含一行字符串,只包含大小写字母、标点符号和空格。长度不超 过 1000000。
【输出格式】
输出一个整数,表示 Alice 和 Bob 同时出现的次数。
【样例输入】
20 This is a story about Alice and Bob.Alice wants to send aprivate message to Bob.

扫描二维码关注公众号,回复: 6460905 查看本文章
这道题最大的坑在于,你直接从PDF中复制下来, 他会没有空格,很多人做的时候会忽视这一点
import java.util.Scanner;


public class renwuxiangguanxing {
	  public static void main(String[] args)  {
	        Scanner reader=new Scanner(System.in);
	        int res=0;    //save result
	        int K=reader.nextInt();
	        reader.nextLine();    //nextLine吸取回车键
	        String str=reader.nextLine();
	        String words[]=str.split("\\s+|\\.");    //以空格和.分割出来,注意.空格的组合存放为空字符串
	        
	        //    Alice------>Bob
	        for(int i=0;i<words.length;i++){
	            if(words[i].equals("Alice")){
	                for(int j=i+1;j<words.length;j++){
	                    if(words[j].equals("Bob")){
	                        int sum=1;    //这里要等于1
	                        for(int k=i+1;k<j;k++){
	                            sum+=words[k].length()+1;
	                        }
	                        if(sum<=K){
	                            res++;
	                        }
	                    }
	                }
	            }
	        }
	        
	        //Bob--------->Alice
	        for(int i=0;i<words.length;i++){
	            if(words[i].equals("Bob")){
	                for(int j=i+1;j<words.length;j++){
	                    if(words[j].equals("Alice")){
	                        int sum=1;    //这里要等于1
	                        for(int k=i+1;k<j;k++){
	                            sum+=words[k].length()+1;
	                        }
	                        if(sum<=K){
	                            res++;
	                        }
	                    }
	                }
	            }
	        }
	        System.out.println(res);
	    }

}

试题 I: 等差数列
时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分
【问题描述】
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。 现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有 几项?
【输入格式】
输入的第一行包含一个整数 N。 第二行包含 N 个整数 A1,A2,··· ,AN。(注意 A1 ∼ AN 并不一定是按等差数 列中的顺序给出)
【输出格式】
输出一个整数表示答案。
【样例输入】 5 2 6 4 10 20
【样例输出】 10
【样例说明】
包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、 18、20。
【评测用例规模与约定】
对于所有评测用例,2≤ N ≤100000,0≤ Ai ≤109。

这道题其实感觉很水,不知道为什么要把它放在倒数第二道
import java.util.Arrays;
import java.util.Scanner;


public class dengchashulie {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		int n = sc.nextInt();
		int [] num = new int [n];
		for (int i = 0; i < num.length; i++) {
			num[i]=sc.nextInt();
		}
		Arrays.sort(num);
		int temp = Integer.MAX_VALUE;
		for (int i = 0; i < num.length; i++) {
			temp=Math.min(num[i], temp);
		}
		int a = (num[n-1]-num[0])/temp+1;
		System.out.println(a);
	}

}

试题 J: 扫地机器人
时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分
【问题描述】
小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所
示。
走廊内部署了 K 台扫地机器人,其中第 i 台在第 Ai 个方格区域中。 已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干
净。
请你编写一个程序,计算每台机器人的清扫路线,使得

  1. 它们最终都返回出发方格,
  2. 每个方格区域都至少被清扫一遍,
  3. 从机器人开始行动到最后一台机器人归位花费的时间最少。
    注意多台机器人可以同时清扫同一方块区域,它们不会互相影响。
    输出最少花费的时间。 在上图所示的例子中,最少花费时间是 6。第一台路线:2-1-2-3-4-3-2,清 扫了 1、2、3、4 号区域。第二台路线 5-6-7-6-5,清扫了 5、6、7。第三台路线 10-9-8-9-10,清扫了 8、9 和 10。
    【输入格式】
    第一行包含两个整数 N 和 K。 接下来 K 行,每行一个整数 Ai。
    试题 J: 扫地机器人 15
    第十届蓝桥杯大赛软件类省赛 Java 大学 C 组
    【输出格式】
    输出一个整数表示答案。
    【样例输入】 10 3 5 2 10
    【样例输出】 6
    【评测用例规模与约定】
    对于 30% 的评测用例,1≤ K < N ≤10。 对于 60% 的评测用例,1≤ K < N ≤1000。 对于所有评测用例,1≤ K < N ≤100000,1≤ Ai ≤ N。
这道题不会,有没有人能告诉我一下
QQ:1439775520 谢谢

猜你喜欢

转载自blog.csdn.net/a1439775520/article/details/90755868