- MysGln 的博客
GESP1级-B题
- @ 2024-11-16 17:10:50
题目分析
所有个位数为 的正整数,以及 所有的倍数,都被小明称为“幸运数”。小明想知道正整数 和 之间(包括 和 )所有 幸运数的和,你能帮帮他吗?
小杨有 个正整数,他认为一个正整数是美丽数字当且仅当该正整数是 的倍数但不是 的倍数。小杨想请你编写一个程序计算 个正整数中美丽数字的数量。
...
从哪些数里选择一些符合条件的出来,这个「哪些数」可能是 次输入,也可能是区间 ,也可能是区间
小学阶段只需要掌握:从一组连续的数据中选取「符合条件」的出来即可通过B题。
条件里通常考到:判断一个数是否是另一个数倍数、判断素数等,通常两个条件一起出现。
往上可以涉及到初中数学集合的思想。
第一题集合表示
$$\begin{align} S_k &= \{ x \mid x \in \mathbb{Z}^+, (x \bmod 10 = k) \lor (x \bmod k = 0) \}\\ S_k(L, R) &= \{ x \mid x \in S_k, L \leq x \leq R \} \\ \text{Sum} &= \sum_{x \in S_k(L, R)} x \end{align}$$第二题集合表示
$$\begin{align} B &= \{ x \in \mathbb{Z}^+ \mid x \bmod 9 = 0 \land x \bmod 8 \neq 0 \}\\ B(S) &= \{ x_i \mid x_i \in S, x_i \in B \} \end{align}$$通解
以第二题来讲
1.写出条件语句
if (数字 % 9 == 0 && 数字 % 8 != 0) {
}
2.写出数字的范围
for (int i = L; i <= R; i++) {
}
3.组合起来
for (int i = L; i <= R; i++) {
if (i % 9 == 0 && i % 8 != 0) {
个数++
}
}
到这步,核心部分就完成了。
再来一题
1.写出条件语句
if (数字 % 10 == k || 数字 % k == 0) {
累加
}
2.写出数字的范围
for (int i = L; i <= R; i++) {
}
3.组合起来
for (int i = L; i <= R; i++) {
if (i % 10 == k || i % k == 0) {
累加
}
}