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();
    }
}
相关推荐
BillKu33 分钟前
Java + Spring Boot + Mybatis 实现批量插入
java·spring boot·mybatis
YuTaoShao35 分钟前
Java八股文——集合「Map篇」
java
客卿12339 分钟前
力扣100-移动0
算法·leetcode·职场和发展
有梦想的攻城狮3 小时前
maven中的maven-antrun-plugin插件详解
java·maven·插件·antrun
计信金边罗6 小时前
是否存在路径(FIFOBB算法)
算法·蓝桥杯·图论
硅的褶皱6 小时前
对比分析LinkedBlockingQueue和SynchronousQueue
java·并发编程
MoFe16 小时前
【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
java·前端·.netcore
季鸢7 小时前
Java设计模式之观察者模式详解
java·观察者模式·设计模式
Fanxt_Ja7 小时前
【JVM】三色标记法原理
java·开发语言·jvm·算法
緈福的街口7 小时前
【leetcode】347. 前k个高频元素
算法·leetcode·职场和发展