【GESP】C++ 二级真题解析,[2025年12月,第十二次认证]第二题黄金格
GESP C++ 2025年12月,二级真题第二题,考察循环语句应用,涉及到多重循环,比第一题略难比较简单。题目难度⭐☆☆☆☆。
第二题,黄金格
题目要求
题目描述
题目分析
1. 核心逻辑
本题要求在一个 $H \times W$ 的网格中,统计满足特定不等式的格子 $(r, c)$ 数量。核心在于对不等式 $\sqrt{r^2 + c^2} \le x + r - c$ 的处理。
2. 处理技巧:消除根号
在编程中直接使用 sqrt 函数会引入浮点数精度误差,可能导致判断失误。为了保证结果准确,通常将不等式两边进行平方处理。
- 原式:$\sqrt{r^2 + c^2} \le x + r - c$
- 平方后:$r^2 + c^2 \le (x + r - c)^2$
3. 注意事项
- 判定前提:只有当右侧 $x + r - c \ge 0$ 时,两边平方才等价。如果右侧为负数,由于左侧根号结果一定是非负数,该不等式必然不成立。
- 溢出风险:计算平方值 $r^2$ 或 $(x+r-c)^2$ 时,结果可能超过
int的范围,因此需要使用long long类型进行运算。(当然本题没有) - 遍历范围:使用双重循环遍历 $r \in [1, H]$ 和 $c \in [1, W]$ 即可,复杂度为 $O(H \times W)$。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
/**
* GESP 2025年12月 二级编程题 T2: 黄金格
*
* 题目核心:
* 在 H 行 W 列的地图中,统计满足不等式 sqrt(r^2 + c^2) <= x + r - c
* 的格子数量。
*
* 注意点:
* 1. 坐标 r 和 c 的范围分别是 [1, H] 和 [1, W]。
* 2. 为了避免 sqrt 带来的浮点数精度误差,我们可以将不等式两边平方进行比较。
* 平方的前提是不等式右边 (x + r - c) 必须大于等于 0。
* 因为左边是根号结果(非负),如果右边是负数,则不等式一定不成立。
*/
int main() {
int h, w, x;
// 输入 h, w, x 分别占三行
std::cin >> h >> w >> x;
int count = 0;
// 双重循环遍历所有格子 (r, c)
for (int r = 1; r <= h; r++) {
for (int c = 1; c <= w; c++) {
// 计算不等式右边的值
long long rhs = (long long)x + r - c;
// 只有当右边 rhs >= 0 时,平方后的比较才有效
if (rhs >= 0) {
// 左边平方:r^2 + c^2
long long left_sq = (long long)r * r + (long long)c * c;
// 右边平方:(x + r - c)^2
long long right_sq = rhs * rhs;
// 比较平方值
if (left_sq <= right_sq) {
count++;
}
}
}
}
// 输出满足条件的格子总数
std::cout << count;
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
本文由作者按照 CC BY-NC-SA 4.0 进行授权

