GESP2025年12月认证C++二级真题与解析(编程题2 (黄金格))

一、先看原题:

二、题目解析

1、📖 故事背景

小杨来到了一张 神奇地图 🗺️✨

地图是一个方格世界:

  • 有 H 行

  • 有 W 列

  • 每个格子都有坐标 (行号, 列号)

但是!

👉 不是所有格子都普通

👉 有些是 ✨ 黄金格 ✨


2、🧠 黄金格的秘密条件

一个格子 (r, c) 是黄金格,当:

cpp 复制代码
√(r² + c²) ≤ x + r - c

听起来吓人?😄

其实我们只要 照着算 就行!


3、🧩 程序思路(像走地图)

1️⃣ 一行一行看

2️⃣ 一列一列看

3️⃣ 对每个格子:

  • 计算左边

  • 计算右边

  • 判断能不能当黄金格

4️⃣ 能 → 计数 +1


4、💻 参考程序

cpp 复制代码
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int H, W, x;
    cin >> H >> W >> x;

    int ans = 0;  // 黄金格数量

    for (int r = 1; r <= H; r++) {
        for (int c = 1; c <= W; c++) {
            if (sqrt(r * r + c * c) <= x + r - c) {
                ans++;
            }
        }
    }

    cout << ans << endl;
    return 0;
}

5、🔍 逐行讲解

cpp 复制代码
#include <cmath>

👉 因为要用 sqrt()(开平方)


cpp 复制代码
for (int r = 1; r <= H; r++)

👉 在地图上 一行一行走


cpp 复制代码
for (int c = 1; c <= W; c++)

👉 每一行里,一列一列看


cpp 复制代码
sqrt(r * r + c * c)

👉 算左边的数学公式


cpp 复制代码
if ( ... )
    ans++;

满足条件 → 找到一个黄金格 ✨


6、 题目要点:

  • 双重 for 循环(二维地图)

  • 使用 sqrt() 数学函数

  • 把复杂条件写进 if


相关推荐
码匠许师傅18 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http
无名猿19 小时前
new/delete 与 malloc/free:为什么绝对不能混用
c++·内存管理·现代c++·踩坑记录
2601_9622186121 小时前
C++中decltype关键字的实现
开发语言·c++
繁华的地方不一定留下你的脚印21 小时前
C++ std::variant 与 std::visit:安全保存多种类型,写清每个处理分支
开发语言·c++
程序员老陆1 天前
WIN32_LEAN_AND_MEAN:Windows 头文件里的“精简编译开关”
c++·windows
hold?fish:palm1 天前
45 二叉树的右视图
开发语言·c++·算法
ShineWinsu1 天前
对于Redis:Redis的认识以及分布式系统的解析
linux·数据库·c++·redis·缓存·消息队列·分布式架构
布莱克6051 天前
在C++中,构造函数能不能是虚函数?析构函数为什么要虚?
开发语言·c++·构造函数·析构函数·虚函数
旖旎夜光1 天前
LeetCode 137 : 只出现一次的数字 II(位运算) —— 题解
c++·笔记·学习·算法·leetcode·力控
王老师青少年编程1 天前
2026年9月GESP真题及题解(C++七级):必经之路
c++·题解·真题·gesp·七级·2026年9月·必经之路