试题 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();
}
}