跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

2025 年 12 月 GESP C++ 四级真题解析

详细解析了 2025 年 12 月 GESP C++ 四级考试真题,涵盖单选题、判断题及两道编程题。内容涉及指针与地址运算、多维数组存储、排序稳定性判断、结构体与引用传递、函数默认参数等核心知识点。编程题包括基于滑动窗口的地形高度最大和计算,以及基于多条件排序的商品优先购买策略模拟,均提供了完整的 C++ 代码实现与逻辑说明。

奶糖兔发布于 2026/3/29更新于 2026/9/1282 浏览
2025 年 12 月 GESP C++ 四级真题解析

一、单选题

第 1 题

文章配图

解析:

答案 C,创建指针 int *p。获取 x 变量的地址 &x。

第 2 题

文章配图

解析:

答案 C,

int a = 5; // a 变量存储 5
int* p1 = &a; // 创建指针 p1 存储 变量 a 地址
int* p2 = p1; // 创建指针 p2 存储 指针 p1 的地址(即 p2 的地址也是 a 变量的地址)
*p2 = 10; // 指针 p2 的地址存储 10(即修改 a 变量为 10)
第 3 题

文章配图

解析:

答案 B,下标从 0 开始,即 2 行 3 列为 a[2-1][3-1],也就是 a[1][2]。

第 4 题

文章配图

解析:

答案 D,*(p+5) 就是 a[0][0] 往移动 5 个位置,即 a[1][1]。

第 5 题

文章配图

解析:

答案 B,

i 循环为 0 1;j 循环为 0 1 2;k 循环:0 1。i+j+k 为偶数的情况有: i j k 0 0 0:a[0][0][0]=1 0 1 1:a[0][1][1]=4 0 2 0:a[0][2][0]=5 1 1 0:a[1][1][0]=9 1 0 1:a[1][0][1]=8 1 2 1:a[1][2][1]=12 累加和为:1+4+5+9+8+12=39。

第 6 题

文章配图

解析:

答案 A,

文章配图

第 7 题

文章配图

解析:

答案 C,

文章配图

第 8 题

文章配图

解析:

答案 A,

文章配图

第 9 题

文章配图

解析:

答案 B,

文章配图

第 10 题

文章配图

解析:

答案 B,

A:不稳定,{3,'D'} 和 {3,'B'}的相对位置变了 C:可以判断,{3,'D'} 和 {3,'B'}相对位置已经改变了 D:不稳定,{3,'D'} 和 {3,'B'}的相对位置变了

第 11 题

文章配图

解析:

答案 B,

文章配图

第 12 题

文章配图

解析:

答案 A,

文章配图

第 13 题

文章配图

解析:

答案 B,嵌套循环都为 n。

第 14 题

文章配图

解析:

答案 D,

文章配图

第 15 题

文章配图

解析:

答案 B,

文章配图

二、判断题

第 1 题

文章配图

解析:

答案√,

int x = 5; // x 变量存储 5
int *p = &x; // 指针 p 指向 x 变量的地址
*p = *p + 3; // p 指针地址的值 = p 指针地址的值 + 3 = 5 + 3 = 8
第 2 题

文章配图

解析:

答案×,

struct name_struct{
    string first_name; // 姓氏
    string last_name; // 名字
};
struct student{
    name_struct name; // 姓名
    int age;
};
第 3 题

文章配图

解析:

答案√,

多维数组都是按照最高维度的顺序存储,例如 a[5][5][5]: a[0][0][0] → a[0][0][1] → a[0][0][2] → a[0][0][3] → a[0][0][4] a[0][1][0] → a[0][1][1] → a[0][1][2] → a[0][1][3] → a[0][1][4] ... a[1][0][0] → a[1][0][1] → ... → a[1][4][4]

第 4 题

文章配图

解析:

答案√,引用传递会改变实参 a 的值。

第 5 题

文章配图

解析:

答案×,

int arr[5] = {1,2,3,4,5};
int* p1 = arr; // p1 指向 arr[0] 的地址
int* p2 = arr+2; // p2 指向 arr[2] 的地址
cout<<p2<<endl; // 0x62fefc
cout<<p1<<endl; // 0x62fef4
// 输出了 2
// 地址差:0x62fefc - 0x62fef4 = 8
// 指针差:(地址数值差) / 单个元素的字节数 = 8/4=2
cout<<p2-p1;
第 6 题

文章配图

解析:

答案√,时间复杂度描述的是算法执行时间随输入规模增长的量级,而非精确的执行次数,所以循环 n-1 次的时间复杂度是 O(n)。

第 7 题

文章配图

解析:

答案√,选择、希尔、快速、堆排序不稳定,其他都是稳定。

文章配图

第 8 题

文章配图

解析:

答案×,是插入排序的思想。

第 9 题

文章配图

解析:

答案×,会调用'return xy'的函数,只传递 5,y 就为默认值 10,即 510=50。

第 10 题

文章配图

解析:

答案√,fin 会根据空格和换行分别给 a b c d 变量赋值,即 a=10 b=20 c=30 d=40。

三、编程题

第 1 题 [GESP202512 四级] 建造

题目描述

小 A 有一张 M 行 N 列的地形图,其中第 i 行第 j 列的数字 aij 代表坐标 (i,j) 的海拔高度。

停机坪为一个 3×3 的区域,且内部所有 9 个点的最大高度和最小高度之差不超过 H。

小 A 想请你计算出,在所有适合建造停机坪的区域中,区域内部 9 个点海拔之和最大是多少。

输入格式

第一行三个正整数 M,N,H,含义如题面所示。

之后 M 行,第 i 行包含 N 个整数 ai1,ai2,…,aiN,代表坐标 (i,j) 的高度。

数据保证总存在一个适合建造停机坪的区域。

输出格式

输出一行,代表最大的海拔之和。

输入输出样例

输入 #1

5 5 3
5 5 5 5 5
5 1 5 1 5
5 5 5 5 5
5 2 5 2 5
3 5 5 5 2

输出 #1

40

说明/提示

数据范围

对于所有测试点,保证 1 ≤ M,N ≤ 10^3,1 ≤ H, aij ≤ 10^5。

答案
#include <bits/stdc++.h>
using namespace std;
int a[1010][1010];
int main() {
    // 1) 填充数据
    // 1.1) 确定矩阵大小 m*n , 条件 h
    int m,n,h;
    cin>>m>>n>>h;
    // 1.2) 填充二维数组
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            cin>>a[i][j];
        }
    }
    // 2) 枚举
    // 2.1) 枚举出所有右顶点坐标
    int ans=0;
    for(int r_i=3;r_i<=m;r_i++){
        for(int r_j=3;r_j<=n;r_j++){
            // 2.2) 将 3*3 内的最大 最小找出来,计算总和
            int maxx=INT_MIN,minn=INT_MAX,sum=0;
            for(int i=r_i-2;i<=r_i;i++){
                for(int j=r_j-2;j<=r_j;j++){
                    maxx = max(maxx,a[i][j]);
                    minn = min(minn,a[i][j]);
                    sum+=a[i][j];
                }
            }
            // 2.3) 判断最大 - 最小 <= 条件
            if( maxx-minn<=h ){
                // 2.4) 满足:找最大'总和'
                if( sum>ans ) ans=sum;
            }
        }
    }
    cout<<ans;
}

第 2 题 [GESP202512 四级] 优先购买

题目描述

小 A 有 M 元预算。商店有 N 个商品,每个商品有商品名 S、价格 P 和优先级 V 三种属性,其中 V 为正整数,且 V 越小代表商品的优先级越高。

小 A 的购物策略为:

  • 总是优先买优先级最高的东西;
  • 如果有多个最高优先级商品,购买价格最低的;
  • 如果有多个优先级最高且价格最低的商品,购买商品名字典序最小的。

小 A 想知道能购买哪些商品。

输入格式

第一行两个正整数 M,N,代表预算和商品数。

之后 N 行,每行一个商品,依次为 Si Pi Vi,代表第 i 个商品的商品名、价格、优先级。

数据保证不存在两个名字相同的商品。

输出格式

按照字典序从小到大的顺序,输出所有购买商品的商品名。

输入输出样例

输入 #1

20 4
apple 6 8
bus 15 1
cab 1 10
water 4 8

输出 #1

bus cab water

说明/提示

数据范围

对于所有测试点,保证 1 ≤ |Si| ≤ 10,1 ≤ M,Pi ≤ 10^5,1 ≤ N ≤ 10^3,1 ≤ Vi ≤ 10。商品名仅由小写字母组成且不存在两个相同的商品名。

答案
#include <bits/stdc++.h>
using namespace std;
struct goods{
    string s;
    int p,v;
}a[1010];
bool cmp(goods a,goods b){
    if(a.v!=b.v) return a.v<b.v;
    if(a.p!=b.p) return a.p<b.p;
    return a.s<b.s;
}
bool cmp2(string a,string b){
    return a<b;
}
int main() {
    // 1) 填充数据
    // 1.1) 确定预算 m 商品数量 n
    int m,n;
    cin>>m>>n;
    // 1.2) 填充 n 个商品的信息
    for(int i=1;i<=n;i++){
        cin>>a[i].s>>a[i].p>>a[i].v;
    }
    // 2) 根据 3 规则排序
    sort(a+1,a+n+1,cmp);
    // 3) 模拟购买过程
    string ans[1010];
    int ans_size=0;
    for(int i=1;i<=n;i++){
        if(m>=a[i].p){
            m-=a[i].p;
            ans_size++;
            ans[ans_size]=a[i].s;
            if(m==0) break;
        }
    }
    // 4) 根据购买好的商品排序
    sort(ans+1,ans+ans_size+1,cmp2);
    // 5) 输出结果
    for(int i=1;i<=ans_size;i++) cout<<ans[i]<<endl;
}

目录

  1. 一、单选题
  2. 第 1 题
  3. 第 2 题
  4. 第 3 题
  5. 第 4 题
  6. 第 5 题
  7. 第 6 题
  8. 第 7 题
  9. 第 8 题
  10. 第 9 题
  11. 第 10 题
  12. 第 11 题
  13. 第 12 题
  14. 第 13 题
  15. 第 14 题
  16. 第 15 题
  17. 二、判断题
  18. 第 1 题
  19. 第 2 题
  20. 第 3 题
  21. 第 4 题
  22. 第 5 题
  23. 第 6 题
  24. 第 7 题
  25. 第 8 题
  26. 第 9 题
  27. 第 10 题
  28. 三、编程题
  29. 第 1 题 [GESP202512 四级] 建造
  30. 题目描述
  31. 输入格式
  32. 输出格式
  33. 输入输出样例
  34. 说明/提示
  35. 数据范围
  36. 答案
  37. 第 2 题 [GESP202512 四级] 优先购买
  38. 题目描述
  39. 输入格式
  40. 输出格式
  41. 输入输出样例
  42. 说明/提示
  43. 数据范围
  44. 答案

更多推荐文章

查看全部
  • Java 智能客服系统实战:基于 Spring Boot 与 NLP 的实现方案
  • VS Code GitHub Copilot 不支持自定义模型 API 及搜索功能详解
  • Ubuntu 22.04 部署 OpenClaw AI 助手实战指南
  • Python + Bright Data MCP 实时抓取 Google 搜索结果实战
  • OpenClaw + Kimi K2.5 本地私有化部署与办公自动化实战
  • Meta SAM 3D 发布:单张图像生成 3D 模型技术解析
  • G3M:基于图生成建模的视频预训练机器人操作
  • macOS 使用 Homebrew 安装 MySQL 指南
  • 二分查找算法实战:求平方根与山脉数组峰值
  • 多模态 AI 桌面机器人 Kubee Robot 技术架构与应用解析
  • LM Studio 本地离线部署大语言模型实战指南
  • Qwen3 结合 Qwen Agent 智能体开发实战:接入 MCP 工具
  • 基于 GitHub Actions 的 Notion RSS 自动化部署指南
  • whisper.cpp 高性能语音识别推理实现
  • Python 学习资源:300 本经典电子书合集整理
  • 网络安全常用工具汇总:从漏洞扫描到渗透测试实战指南
  • 基于 LLama-Factory 微调大模型生成合规隐私政策
  • 基于 UDP Socket 实现的简易英译汉翻译服务器
  • 企业电子招投标采购系统功能简介
  • 自研 C# UI 引擎 XchyUI:内核 200KB,支持 .NET8 AOT 跨平台

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online