2024 蓝桥杯 Java 研究生组

试题 A: 拼正方形(本题总分:5 分)

小蓝正在玩拼图游戏,他有 7385137888721 个 2 × 2 的方块和 10470245 个 1 × 1 的方块,他需要从中挑出一些来拼出一个正方形,比如用 3 个 2 × 2 和 4 个 1 × 1 的方块可以拼出一个4 × 4 的正方形,用 9 个 2 × 2 的方块可以拼出一个 6 × 6 的正方形,请问小蓝能拼成的最大的正方形的边长为多少。

解题思路:

尽可能多的使用 2x2 的正方形,之后用 1x1 的正方形镶边。

Java代码:

java 复制代码
public class Main {
    public static void main(String[] args) {
        long num2x2 = 7385137888721L;
        long num1x1 = 10470245L;
        
        long result = (long) Math.sqrt(num2x2) * 2;
        
        while (true) {
            if ((num1x1 -= result * 2 + 1) < 0) break;
            result ++;
        }
        
        System.out.println(result );
    }
}

试题 B: 召唤数学精灵(本题总分:5 分)

数学家们发现了两种用于召唤强大的数学精灵的仪式,这两种仪式分别被称为累加法仪式 A(n) 和累乘法仪式 B(n)。累加法仪式 A(n) 是将从 1 到 n 的所有数字进行累加求和,即:A(n) = 1 + 2 + · · · + n 。累乘法仪式 B(n) 则是将从 1 到 n 的所有数字进行累乘求积,即:B(n) = 1 × 2 × · · · × n 。据说,当某个数字 i 满足 A(i) − B(i) 能被 100 整除时,数学精灵就会被召唤出来。现在,请你寻找在 1 到 2024041331404202 之间有多少个数字 i,能够成功召唤出强大的数学精灵。

解题思路:

找规律。

Java代码:

java 复制代码
public class Main {
    public static void main(String[] args) {
        long num = 2024041331404202L;
        
        long result1 = 4 + 2;
        long result2 = (num - 200) / 200 * 4;
        
        System.out.println(result1 + result2);
    }
}

试题 C:

诗人的眼中,数字是生活的韵律,也是诗意的表达。小蓝,当代顶级诗人与数学家,被赋予了 "数学诗人" 的美誉。他擅长将冰冷的数字与抽象的诗意相融合,并用优雅的文字将数学之美展现于纸上。某日,小蓝静坐书桌前,目光所及,展现着 n 个数字,它们依次为 a1, a2, . . . , an,熠熠生辉。小蓝悟到,如果一个数能够以若干个(至少两个)连续的正整数相加表示,那么它就蕴含诗意。例如,数字 6 就蕴含诗意,因为它可以表示为 1 + 2 + 3。而 8 则缺乏诗意,因为它无法用连续的正整数相加表示。小蓝希望他面前的所有数字都蕴含诗意,为此,他决定从这 n 个数字中删除一部分。请问,小蓝需要删除多少个数字,才能使剩下的数字全部蕴含诗意?

解题思路:

找规律。发现只有 2 n 2^n 2n 无法表出。

Java代码:

java 复制代码
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(System.out);
        
        final long POW = 1L << 62;
        int n = Integer.parseInt(in.readLine());
        
        StringTokenizer st = new StringTokenizer(in.readLine());
        int ans = 0;
        while (n-- > 0) {
            if (POW % Long.parseLong(st.nextToken()) == 0) ans++;
        }
        out.println(ans);
        
        out.flush();
        out.close();
    }
}
相关推荐
懒惰的橘猫10 分钟前
配置Hadoop集群-测试使用
java·ide·eclipse
破烂公司一级特派员1 小时前
互联网大厂Java面试实录:从基础到微服务的深度考察
java·spring boot·微服务·八股文·面试技巧
Linux运维老纪1 小时前
微服务6大拆分原则
java·运维·微服务
黄俊懿1 小时前
【深入理解SpringCloud微服务】手写实现一个微服务分布式事务组件
java·分布式·后端·spring·spring cloud·微服务·架构师
枫夜求索阁1 小时前
大模型文件类型揭秘:从基础到面试挑战
人工智能·面试·职场和发展·大模型
在未来等你1 小时前
互联网大厂Java求职面试:基于RAG的智能问答系统设计与实现-2
java·智能问答·milvus·向量数据库·rag·spring ai
极小狐1 小时前
如何使用极狐GitLab 软件包仓库功能托管 helm chart?
java·linux·服务器·数据库·c#·gitlab·maven
有梦想的攻城狮2 小时前
spring中的@Inject注解详情
java·后端·spring·inject
Top`2 小时前
服务预热原理
java·后端·spring
loveLifeLoveCoding2 小时前
springboot 加载 tomcat 源码追踪
java·spring boot·spring