当前位置: 首页 > news >正文

GESP2026年3月认证C++四级( 第三部分编程题(1) 山之谷)



🌄《山谷探险记》——编程题第一题讲解


🧙 一、故事背景

1、小明来到一片神秘山地:

每个格子都有一个高度

2、就像这样:

7 6 6 7 9 6 5 6 7 6 6 5 7 8 9

3、🌱 小明要找的是:

👉“山谷”


🌟 二、什么是“山谷”?

1、🧠 定义

👉 一个格子,如果:

它 ≤ 周围所有8个方向的格子

那它就是山谷!


2、📦 8个方向是哪些?

左 上 右 左 右 左 下 右

3、也就是:

⬅️ ➡️ ⬆️ ⬇️ ↖️ ↗️ ↙️ ↘️

🎯 三、任务目标

👉 统计:一共有多少个山谷


🧪 四、用样例来理解

7 6 6 7 9 6 5 6 7 6 6 5 7 8 9

1、我们来找山谷 👇


2、从头到尾看一遍:

(1)🔍 看 (2,2) = 5

周围是:

7 6 6 6 6 6 5 7

👉 它是最小的!

✔ 是山谷!


(2)全部都找完,最终找到3个山谷


(3)🎉 所以答案是:

3

🧠 五、核心思路

🎯 每个格子都要检查!

👉 对每个 (i, j):

1️⃣ 假设它是山谷
2️⃣ 检查周围8个方向
3️⃣ 如果有比它小的 → ❌ 不是
4️⃣ 如果都 ≥ 它 → ✅ 是山谷


⚠️ 六、难点:边界问题!

1、🧙 故事

地图边缘没有邻居怎么办?

👉 比如左上角!


2、💡 解决方法

👉 在地图外面包一圈“超级高山”:

h[i][0]=h[0][i]=h[i][m+1]=h[n+1][i]=1e9;

这样:

👉 边界就安全了!


🎉 七、参考程序:

#include<iostream> using namespace std; int main(){ int n,m; cin>>n>>m; int h[105][105]; // 读入 for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>h[i][j]; // 加围墙 for(int i=0;i<=max(n,m)+1;i++) h[i][0]=h[0][i]=h[i][m+1]=h[n+1][i]=1e9; int ans=0; // 遍历每个点 for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ bool ok=true; // 检查周围8个方向 for(int i2=i-1;i2<=i+1;i2++){ for(int j2=j-1;j2<=j+1;j2++){ if(h[i][j]>h[i2][j2]){ ok=false; } } } if(ok) ans++; } } cout<<ans; return 0; }

🧩 八、详细讲解


1、🌟 第一步:读入地图

int n, m; cin >> n >> m; int h[105][105]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin >> h[i][j];

2、🌟 第二步:加“围墙”

for(int i=0;i<=max(n,m)+1;i++){ h[i][0] = h[0][i] = h[i][m+1] = h[n+1][i] = 1e9; }

👉 外面一圈都是超级大!


3、🌟 第三步:检查每个点

int ans = 0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){

4、🌟 第四步:判断是不是山谷

bool ok = true; for(int i2=i-1;i2<=i+1;i2++){ for(int j2=j-1;j2<=j+1;j2++){ if(h[i][j] > h[i2][j2]){ ok = false; } } }

👉 只要发现有更小的邻居 → 失败!


5、🌟 第五步:统计答案

ans += ok;

👉 true = 1
👉 false = 0


6、🌟 第六步:输出

cout << ans;

🚀 九、考点总结

✅ 二维数组遍历
✅ 8方向枚举
✅ 边界处理技巧(超级重要!)
✅ 模拟题思维


🎁 十、记忆口诀!

🌟 山谷判断口诀:

自己最小才算谷 八方邻居都要顾 边界加墙防越界 全部检查不马虎

http://www.cnnetsun.cn/news/1368260.html

相关文章:

  • 新手也能看懂的X站cms渗透实战:从广告设置到代码执行的完整漏洞链分析
  • 小白也能懂的Grok-3-Mini-Fast-Latest:快到离谱的轻量AI模型
  • SakuraLLM技术内幕:多引擎推理架构与日中翻译场景全解析
  • 23. 二叉树的高度
  • 5分钟搞定 Stable Diffusion v1.5 Archive 部署:开箱即用,快速体验AI绘画魅力
  • 阿里云跨账号VPC对等连接实战:5分钟搞定ECS私网互通(附路由配置截图)
  • 快速掌握RIP协议配置全流程
  • 5分钟搞定Unity+Visual Studio开发环境配置(含C#游戏开发工作负载)
  • 深求·墨鉴(DeepSeek-OCR-2)效果展示:水墨留痕可视化识别过程
  • 基于LLaVA-v1.6-7b的Agent Skill开发:从入门到实战
  • 告别图片资源:手把手教你用iconfont优化微信小程序性能(2024最新版)
  • Janus-Pro-7B一键部署教程:Ubuntu20.04环境下的快速安装指南
  • OpenSumi AI 原生功能实战:打造智能化开发体验的 7 个关键步骤
  • LLM配置模板管理:解决本地化部署痛点的技术指南
  • Animius视频下载模块详解:M3U8流媒体下载与断点续传实现
  • 收藏!小白程序员必看:ViCToR如何让大模型更好地理解视觉信息
  • LeetCode 热题 100 之 35. 搜索插入位置 74. 搜索二维矩阵 34. 在排序数组中查找元素的第一个和最后一个位置
  • SiamMask核心原理深度解析:孪生网络如何统一跟踪与分割
  • 5分钟搞定!用MediaMTX和FFmpeg搭建RTSP转HLS直播流(含低延迟配置)
  • [技术突破]48Tools直播数据采集系统:从故障修复到架构升级的实践之路
  • **标题:MLOps实战进阶:基于Docker+Kubernetes的
  • ContextCapture Center 在智慧城市建设中的实景三维建模实践
  • 探索Java世界的新表情——emoji-java库
  • 认真写的论文被当AI?百考通:降重+降AI,为原创者正名!
  • 如何使用vscode-markdown-pdf:3分钟快速上手指南
  • 【亲测免费】 推荐一款强大的开源网址导航系统:WebStack-Laravel
  • 从像素到对象:手把手教你理解Cutie的遮蔽注意力机制(附代码解读)
  • 三维重建质量评估:从像素到感知的四大核心指标解析
  • 某盾blackBox逆向避坑指南:如何应对频繁更新的JS混淆策略
  • SQL Server数据库被标记为SUSPECT?5步紧急修复指南(附完整命令)