第十届蓝桥杯省赛Java B组真题解析

本文详细解析了第十届蓝桥杯省赛Java B组的比赛题目,涵盖题A至题H,解题思路包括多重循环、遍历、斐波那契数列、广度优先遍历等方法,对于部分复杂题目,作者也表达了在理解上的挑战。
摘要由CSDN通过智能技术生成

以下为第十届蓝桥杯省赛Java B组真题加我的题解,如有错误望指正。

题A

【问题描述】
	作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容。
 每位球员担任 1 号位至 5 号位时的评分如下表所示。
 请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?	不贴图了。

解答:最简单的方法就是多重循环。有几个人就循环几次,遍历出所有的结果。

题B

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

解答:还是遍历,用set去掉重复的子串。最后返回set.size();

public static void main(String[] args) {
        String str = "aaab";
        System.out.println(cal(str));
    }

    private static int cal(String str){
        if(str.length() == 0 || str.length() == 1){
            return str.length();
        }
        Set<String> set = new HashSet<>();
        for(int i = 1; i <= str.length(); i++){
            for(int j = 0; j < str.length(); j++){
                if(j + i <= str.length()){
                    set.add(str.substring(j, j + i));
                }
            }
        }

        return set.size();
    }

题C

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

解答:类似于斐波那契数列,注意的就是超出数值表示范围。

public static void main(String[] args) {
        System.out.println(fb(4));
        System.out.println(fb(5));
        System.out.println(fb(6));
        System.out.println(fb(20));
    }
    private static int fb(int n){
        if(n == 1 || n == 2 || n == 3){
            return 1;
        }
        return (fb(n - 1) + fb(n - 2) + fb(n - 3)) % 10000;
    }

题D

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

解答:还是暴力…

public static void main(String[] args) {
        int num = 2019;
        int count = 0;

        for(int i = 1; i < 2019; i++){
            for(int j = 1; j < 2019; j++){
                for(int k = 1; k < 2019; k++){
                    int m = i + j + k;
                    if(m == num && theNumber(i) && theNumber(j) && theNumber(k)){
                        count++;
                    }
                }
   
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值