第十届蓝桥杯大赛软件类省赛 Java B组题目

本文介绍了第十届蓝桥杯大赛软件类省赛 Java B组的若干试题,涉及组队问题、字符串处理、数列求值、数的分解、迷宫算法、特别数的和、外卖店优先级模拟以及人物相关性分析等。每个试题提供了问题描述、解题陷阱、思路和相关知识点,帮助参赛者理解和解决这些问题。
摘要由CSDN通过智能技术生成

试题 A: 组队

【问题描述】
作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容。 每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?
第一题图示
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

490

【题目陷阱】
在完成这到题的时候,我直接观察每一行选取最大值,这样子很容易造成错看漏看。在第一题一定要细心。

试题 B: 不同子串 -ArrayList的运用、字符串切割

【问题描述】
一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。 注意在计算时,只算本质不同的串的个数。 请问,字符串0100110001010001 有多少个不同的非空子串?

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

【题目陷阱】
在我写题的时候,把题意理解成了对字符串的所有字符进行全排列。而且该题需要使用Java的内置函数。String.substring(start,end+1) 函数用于切割字符串,此函数比较实用,需要记住其用法。

【题目思路】
从字符串的头部开始,对每一个字符利用substring函数对1至n个长度的子字符串进行切割,对不重复的子字符串进行计数。子字符串需要使用数组进行存储。

【程序代码】

//代码段
package lanqiao;
import java.util.*;
public class plus2019 {
   

	public static void main(String[] args) {
   
		// TODO 自动生成的方法存根
		ArrayList<String> s = new ArrayList<>();
		Scanner sc = new Scanner(System.in);
		String cache = null;
		int count = 0;
		String st = "0100110001010001";
		for(int i = 0;i<st.length();i++) 
		{
   
			for(int j = i;j<st.length();j++) //此处是需要从i开始的
			{
   
				cache = st.substring(i,j+1);
				if(!s.contains(cache)) //检测数组中是否有cache这个值
				{
   
					s.add(cache);
					count++;
				}
			}
			
		}
		System.out.println(count);
	}

}

【题目知识点】

  1. String.substring 切割字符串
  2. ArrayList 有多种函数可以调用的数组。如果题目3. 中需要使用数组的话尽量使用该方法。
  3. ArrayList.contrains(string1) 在该数组中是否有这一个string1的 出现

试题 C: 数列求值 -对结果大数题的解法

【问题描述】
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求 第 20190324 项的最后 4 位数字。

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个 4 位整数(提示:答案的千位不为 0),在提交答案时只填写这个整数,填写 多余的内容将无法得分。

【题目陷阱】
该题的答案过长,就连long也是溢出的,所以处理答案溢出并且不用得到结果的完整结果的题,可以通过存该题需要的答案 (在本题中是后4位) 进行求解

【题目思路】
在题目陷阱中也用提到对后4位进行存储。具体方法就是使用取余函数对结果进行操作。

【程序代码】

//代码段
package lanqiao;

public class first1 {
   

	public static void main(String[] args) {
   
		// TODO 自动生成的方法存根
		long a = 1,b = 1 ,c = 1,d = 0;
		int num = 4;
		long re = 0;
		while(num<=20190324) {
   
			re = a + b +c;
			if(re>10000)
				re = re%10000;//取结果的后4位
			d = a;
			a = b;
			b = c;
			c = re;
			//System.out.println(re);
			num++;
		}
		System.out.println(c);//最后结果
		System.out.println(b);//倒数第1个
		System.out.println(a);//倒数第2个
		System.out.println(d);//倒数第3个
	}

}


【题目知识点】
对大数的巧化,如果需要的是后n位则直接取余;有一些题会让你直接把取余的结果返回给他。所以遇到不让你直接填答案的一定要小心大数。

试题 D: 数的分解 -判断某数是否包含某个位数模板

【问题描述】
把 2019 分解成 3 个各不相同 的正整数之和,并且要求每个正整数都不包 含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。

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

【题目陷阱】

  1. 该题在题干出就有陷阱(上面已经标黄)
  2. 对于交换 3 个整数的顺序被视为同一种方法 到底是3个还是6个。该怎么快速得到正确答案?
  3. 对于判断尾数中是否含有某个数字的模板书写是否正确?
    经常出现的错误:
    while循环的条件经常写成n/10,正确写法 应该是n。

【题目思路】
通过一个自敲函数判断是否存在2或者4。

【程序代码】

//代码段
package lanqiao;
import java.util.*;
public class second1 {
   
	
	public static boolean right(int n) {
   
		while(n != 0) {
   
			if(n%10==2||n%10==4)
				return false;
			else
				n = n/10;
		}
		if(n==0)
			return true;
		else
			return false;
	}
	public static void main(String[] args) {
   
		// TODO 自动生成的方法存根
		int num = 0;
		for(int i = 1;i<2019;i++) {
   
			for(int j = 1;j<2019;j++) {
   
				for(int k = 1;k<2019;k++)
					if((i+j+k==2019)&&(right(i)&&right(j)&&right(k))&&i!=j&&i!=k&&j!=k) {
   
						System.out.println("yes");
						num++;
					}
					
			}
		}
		System.out.println(num/6);//此处除于6是A33全排列.
	}

}

【题目知识点】
判断3个数的任意组合是全排列组合也就是A33=6。

试题 E: 迷宫 -BFS、路径逆向推导、Queue类的使用

【问题描述】
下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方。
010000 000100 001001 110000
迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫, 一共 10 步。其中 D、U、L、R 分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(30 行 50 列),请找出一种通过迷宫的方式, 其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。 请注意在字典序中D<L<R<U。(如果你把以下文字复制到文本文件中,请务 必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 maze.txt, 内容与下面的文本相同)
01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001100110100101 01111011010010001000001101001011100011000000010000 01000000001010100011010000101000001010101011001011 00011111000000101000010010100010100000101100000000 11001000110101000010101100011010011010101011110111 00011011010101001001001010000001000101001110000000
10100000101000100110101010111110011000010000111010 00111000001010100001100010000001000101001100001001 11000110100001110010001001010101010101010001101000 00010000100100000101001010101110100010101010000101 11100100101001001000010000010101010100100100010100 0000001000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值