蓝桥杯2019JAVA_B省赛真题详解

文章目录

  • 第一题:组队
    • 题目描述
    • 解题思路
  • 第二题:不同子串
    • 题目描述
    • 解题思路
  • 第三题:数列求值
    • 题目描述
    • 解题思路
  • 第四题:数的分解
    • 题目描述
    • 解题思路
  • 第五题:迷宫
    • 题目描述
    • 解题思路
  • 第六题:特别数的和
    • 题目描述
    • 解题思路
  • 第七题:外卖店优先级
    • 题目描述
    • 解题思路
  • 第八题:人物相关性分析
    • 题目描述
  • 第九题:后缀表达式
    • 题目描述
  • 第十题:灵能传输
    • 题目描述

第一题:组队

题目描述

作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容。

每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?

(如果你把以上文字复制到文本文件中,请务必检查复制的内容是否与文 档中的一致。在试题目录下有一个文件 team.txt,内容与上面表格中的相同, 请注意第一列是编号)

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

解题思路

Excel
答案:490


第二题:不同子串

题目描述

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

请问,字符串0100110001010001 有多少个不同的非空子串?

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

解题思路

两个节点 begin end 开始 双循环走动

import java.util.ArrayList;
public class demo02不同字串 {
public static void main(String[] args) {String s = "0100110001010001";ArrayList<String> ku = new ArrayList<>();for (int begin = 0; begin < 16; begin++) {for (int end = begin; end <16 ; end++) {String s1 = s.substring(begin,end+1);if(!ku.contains(s1))ku.add(s1);}}System.out.println(ku);System.out.println(ku.size());  //100
}}

第三题:数列求值

题目描述

给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求 第 20190324 项的最后 4 位数字。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个 4 位整数(提示:答案的千位不为 0),在提交答案时只填写这个整数,填写 多余的内容将无法得分。

解题思路

数列的性质
在一个有规律的数列中
整体对一个数取余 和 取余之后按原本规律进行 是一样的
描述不清 看代码吧 这是数学规律

/*** @author sjf* @date 2020/3/20 22:13*/public class demo03数列求值 {public static void main(String[] args) {int a1 = 1;int a2 = 1;int a3 = 1;int ans = 0;for (int i = 4; i <=  20190324 ; i++) {ans = (a1 + a2 + a3)%10000;  //求一个数的后四位 对 10000 取余a1 = a2;a2 = a3;a3 = ans;}System.out.println(ans);  //4659}
}

第四题:数的分解

题目描述

把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包 含数字 2 和 4,一共有多少种不同的分解方法?

注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

解题思路

枚举 注意优化
这种大小排好序的优化
既节省时间 又去重

枚举假设获得 3 个数 i,j,k ,保证 i i 从 1 开始枚举,到 673 结束,因为 i 是最小的,
所以必须小于 2019 的 1/3.j 从 i+1 开始枚举,到 (2019-i)/2 结束。
这是因为这样的话可以保证 i 其实每次枚举出 i 和 j 时,可以先判断这个数是否符合数字的要求。
如果不符合,就不用继续枚举下一个数字,而是枚举这个数字的下一个。
当然这个程序里面没有加上这个优化,因为写起来有点麻烦,
这个程序已经效率够高了。

/*** @author sjf* @date 2020/3/20 22:20*/public class demo04数的分解 {public static void main(String[] args) {int count = 0;//两重枚举 i//优化枚举后 这个边界很难掌控 要细心!!for (int i = 1; i <=2019/3 ; i++) {if(check(i))for (int j = i+1 ; j <=(2019-i)/2 ; j++) {int k = 0;if(check(j)) {k = 2019 - i - j;


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部