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();
    }
}
相关推荐
Akshsjsjenjd28 分钟前
Tomcat 简介与 Linux 环境部署
java·linux·tomcat
qq_569384121 小时前
Jenkins(速通版)
java·kubernetes·jenkins
青云交1 小时前
Java 大视界 -- Java 大数据在智能教育学习效果评估与教学质量改进中的深度应用(414)
java·flink 实时计算·java 大数据·智能教育·学习效果评估·教学质量改进·spark 离线分析
Charles豪1 小时前
MR、AR、VR:技术浪潮下安卓应用的未来走向
android·java·人工智能·xr·mr
TeleostNaCl1 小时前
SMBJ 简单使用指南 实现在 Java/Android 程序中访问 SMB 服务器
android·java·运维·服务器·经验分享·kotlin
我不是混子1 小时前
Java的SPI机制详解
java·后端
武子康2 小时前
Java-131 深入浅出 MySQL MyCat 深入解析 schema.xml 配置详解:逻辑库、逻辑表、数据节点全攻略
xml·java·数据库·mysql·性能优化·系统架构·mycat
我就要用Cx3302 小时前
微服务配置管理
java·运维·微服务
Seven972 小时前
剑指offer-33、丑数
java