2024第十五届蓝桥杯 Java B组 填空题

声明:博主比较菜,以下均为个人想法。解决方法仅供参考。欢迎大家一起讨论交流!

第一题:

题目:

(简洁版)从小到大排列是20或24倍数的正整数,前10个数依次是:"20 24 40 48 60 72 80 96 100 120",求第202420242024个数是多少?(填空题)

答案:

java 复制代码
// 2429042904288

思路&解析:

题目中给出的示例其实就已经点出了这些数排列的规律:20、24的最小公倍数就是120。翻译成人话就是:每10个数为一轮。让我们说的再明白些:

序号 数值
1 20
2 24
3 40
4 48
5 60
6 72
7 80
8 96
9 100
10 120
...... ......

可以看出,奇数均为20的倍数,偶数均为24的倍数。

而我们要求的第202420242024个数正好是偶数,所以答案一定是24的倍数。

此外,让我们再回到前10个数的例子中来。可以发现:10个数中一半为20的倍数,一半为24的倍数(奇偶各占一半)。所以可以想到:202420242024个数中,一半是20的倍数,一半是24的倍数。所以此时"求第202420242024个数"的问题就转化为了"求第202420242024 / 2 = 101210121012个且是24的倍数的数"。

代码求解:

java 复制代码
BigInteger bigInteger = new BigInteger(new BigInteger("101210121012").multiply(new BigInteger("24")).toString());
System.out.println(bigInteger);// 2429042904288

第二题:

题目:

(个人理解:)将一个n位的数字按一定的规则排成一个数列。

规则:

  1. 这个数列的起始部分分别为该数字每一位上的数。例如:数字(12345)排成数列是【1,2,3,4,5】。
  2. 这个数列的其它部分分别为从当前数列的最后一位起,前n项的和。例如数字(12345,共5位)排成数列【1,2,3,4,5,(?),......】,此时数列的第6个数就是从当前数列的最后一位起前5项的和,即(1+2+3+4+5=15)【1,2,3,4,5,15】;第7个数就是从当前数列的最后一位起前5项的和,即(2+3+4+5+15=29)【1,2,3,4,5,15,29】;......

如果这个数列中包含这个数字本身,那么这个数就是类斐波那契循环数。

求从0~10^7范围中最大的类斐波那契循环数。(填空题)

答案:

java 复制代码
// 7913837

思路&解析:

大家都知道,int的取值范围为-2^31 ~ 2^31-1,即±21亿左右。这里的2^7为1千万,显然出题人并不想为难我们,使用int即可。

这个数列使用数组或集合均可,我们主要进行三步操作:首先只需要将传入的数字拆分再存入;其次计算数列之后的每一位;最后判断数列中是否存在这个传入的数字即可。(当然数组或集合中也没有必要存储每一个拆分再求和的数字,只需存储每一轮那个最后也是最大的数字即可)

代码求解:

java 复制代码
public class Main {
    static List<Integer> list = new ArrayList<>();

    public static void main(String[] args) {
        // 10^7 = 1千万

        for (int i = 10000000; i > 0; --i) {// 要最大的就从最大边界开始循环

            feb(i);// 进行判断

            if (list.get(list.size() - 1) == i) {// 从集合中取出的最后一个数字与i相等
                System.out.println("找到你了:" + i + ",你就是题目所要求的类斐波那契循环数!");
                System.exit(0);
            }

            list.clear();
            System.out.println("当前找到第" + i + "个数了!");
        }

    }

    public static void feb(int n) {
        int sum = 0;
        String num = n + "";// 方便判断当前n是几位数

        for (int i = 0; i < num.length(); i++) {// 将n的每一位数字加入集合
            list.add(Integer.parseInt(String.valueOf(num.charAt(i))));
        }


        while (true) {
            for (int i = list.size() - 1; i >= list.size() - num.length(); --i) {// 依次求n的前位数项和
                sum += list.get(i);
            }

            if (sum <= n) {// 如果此时sum大于传入的数字n就没有必要再继续计算前位数项和了
                list.add(sum);
                sum = 0;
            } else {
                break;
            }
        }
    }
}

Console:

附录:

附上实际计算结果:

序号 数值
1 7
2 9
3 1
4 3
5 8
6 3
7 7
8 38
9 69
10 129
11 257
12 511
13 1,014
14 2,025
15 4,043
16 8,048
17 16,027
18 31,925
19 63,593
20 126,675
21 252,336
22 502,647
23 1,001,251
24 1,994,454
25 3,972,881‬
26 7,913,837‬
...... ......

感谢阅读!

转载请声明出处,谢谢!

相关推荐
吴长建先生重名了22 分钟前
GitHub Actions部署报表系统踩坑记:幂等性与限
算法
贝壳6901 小时前
一个2026年2月才上传的库,凭什么敢碰2009年就有人写烂的题目
算法
贝壳6901 小时前
同一道三亿位选型题,三个AI给了我三个答案,我把它们拉进同一台机器复跑
算法
Go Work2 小时前
docker 占满根分区时先分清谁在吃盘
经验分享·笔记
蒸蒸yyyyzwd3 小时前
从邓明学习的后端笔记
笔记·学习
机器学习之心4 小时前
基于变量相关图与残差学习的 GCN 多变量回归方法——混凝土 28 天抗压强度预测
学习·回归·gcn
青少儿编程课堂4 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
在所不辞兄4 小时前
为什么在新能源汽车电驱与热管理开发中,AI驱动的数字孪生和数据驱动仿真正在部分替代对物理台架与实车标定的依赖?
人工智能·深度学习·神经网络·算法·机器学习
I_belong_to_jesus15 小时前
C++关于分支预测的优化1
开发语言·c++·算法
Rabitebla16 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash