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‬
...... ......

感谢阅读!

转载请声明出处,谢谢!

相关推荐
Forever Nore4 分钟前
Nginx 学习
运维·学习·nginx
ikkkkkkkl15 分钟前
LeetCode:347.前K个高频元素
数据结构·c++·算法·leetcode
筱砚.29 分钟前
【数据结构——并查集】
数据结构·算法
源代码•宸32 分钟前
C++高频知识点(十五)
c++·经验分享
2301_801673011 小时前
ipv6学习
linux·服务器·学习
F_D_Z1 小时前
【感知机】感知机(perceptron)学习算法的对偶形式
人工智能·学习·算法·支持向量机
发发发发8882 小时前
leetcode 674.最长连续递增序列
java·数据结构·算法·leetcode·动态规划·最长连续递增序列
₯㎕星空&繁华2 小时前
接口自动化-pytest
运维·经验分享·笔记·自动化·pytest·接口
2501_924748242 小时前
无人机光伏巡检效率提升68%!陌讯动态融合算法实战解析
算法·目标检测·计算机视觉·无人机
weixin_516875652 小时前
二分查找算法,并分析其时间、空间复杂度
算法