GESP C++ 2026‑09 押题
2026-08-25 22:14:01
发布于:新疆
1到8级
说明:GESP 无官方泄露真题,全部是高频考点模拟押题,严格匹配官方考纲,每级给出核心考点 + 2 道编程押题 + 参考代码CCF-G...。
考试统一格式:单选 15 题 30 分,判断 10 题 20 分,编程 50 分(2 道各 25 分),满分 100,60 分通过CSDN博...。
🟢GESP‑1 级(顺序、分支、循环基础)
核心考点:变量、输入输出、if、for/while、算术运算、简单逻辑,无数组字符串。
押题 1(25 分)
输入整数 n,输出 1 到 n 所有整数的和。
样例输入:10
样例输出:55
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++) sum+=i;
cout<<sum;
return 0;
}
押题 2(25 分)
输入 3 个整数 a,b,c,输出其中最大值。
样例输入:12 45 27
样例输出:45
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
int m=a;
if(b>m) m=b;
if(c>m) m=c;
cout<<m;
return 0;
}
🟡GESP‑2 级(嵌套循环、简单数组、字符串入门)
前面已经给过,简要复盘
考点:嵌套循环打印图形,一维数组最值求和,字符串遍历,数位拆分,简单数学函数CCF-G...。
押题方向:直角 / 倒三角图形;求最大最小;统计大写字母;三位数各位求和。
🟠GESP‑3 级(位运算、进制、一维数组、枚举模拟)
核心考点:进制转换、位运算 & | ^ ~ <<>>,一维数组,字符串,枚举模拟,ASCII 码CCF-G...。
押题 1(25 分)
输入十进制正整数 n,把 n 转为二进制输出。
样例输入:13
样例输出:1101
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
string s;
while(n>0){
s=char(n%2+'0')+s;
n/=2;
}
cout<<s;
return 0;
}
押题 2(25 分)
输入 n,再输入 n 个整数,统计其中偶数的个数。
样例输入
plaintext
6
1 2 3 4 5 6
样例输出:3
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,cnt=0,x;
cin>>n;
for(int i=0;i<n;i++){
cin>>x;
if(x%20) cnt++;
}
cout<<cnt;
return 0;
}
🔴GESP‑4 级(二维数组、函数、递归入门、冒泡选择排序)
核心考点:函数定义调用、值传递;二维数组;冒泡、选择排序;简单递归;顺序查找。
押题 1(25 分)
写函数gcd(int a,int b)求最大公约数。输入两个整数,输出最大公约数。
样例输入:24 18
样例输出:6
cpp
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
while(b){
int t=a%b;
a=b;b=t;
}
return a;
}
int main(){
int x,y;
cin>>x>>y;
cout<<gcd(x,y);
return 0;
}
押题 2(25 分)二维数组求和
输入 n,m,n 行 m 列矩阵,输出矩阵全部元素总和。
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,sum=0,x;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
cin>>x;sum+=x;
}
cout<<sum;
return 0;
}
🟣GESP‑5 级(素数筛、高精度、二分、贪心、分治、复杂度)
核心考点:埃氏筛、素数;高精度加减乘;二分查找 / 二分答案;贪心;快速排序、归并排序;简单链表;复杂度估算。
押题 1(25 分)埃氏筛
输入 n,输出 1~n 之间素数的总个数。
样例输入:30
样例输出:10
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
bool isp[N];
int main(){
int n,cnt=0;
cin>>n;
memset(isp,1,sizeof isp);
isp[0]=isp[1]=0;
for(int i=2;i<=n;i++){
if(isp[i]){
cnt++;
for(int j=2i;j<=n;j+=i) isp[j]=0;
}
}
cout<<cnt;
return 0;
}
押题 2(25 分)二分查找
输入 n,输入 n 个从小到大排好序整数,再输入查询数 x,输出 x 的下标(不存在输出‑1)。
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[100005],x;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
cin>>x;
int l=0,r=n-1,ans=-1;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]==x){ans=mid;break;}
else if(a[mid]<x) l=mid+1;
else r=mid-1;
}
cout<<ans;
return 0;
}
🔵GESP‑6 级(树、BFS、DFS、简单 DP、栈队列)
核心考点:栈、队列;二叉树,前中后序遍历;DFS、BFS;简单动态规划(01 背包入门);搜索剪枝。
押题 1(25 分)迷宫 BFS
nm 迷宫,0 通路 1 墙,求从 (0,0) 到 (n‑1,m‑1) 最短步数。(BFS 模板)
cpp
#include<bits/stdc++.h>
using namespace std;
struct Node{int x,y,s;};
int n,m;
int mp[105][105],vis[105][105];
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++) cin>>mp[i][j];
queue<Node>q;
q.push({0,0,0});vis[0][0]=1;
int res=-1;
while(!q.empty()){
Node u=q.front();q.pop();
if(u.xn-1&&u.y==m-1){res=u.s;break;}
for(int d=0;d<4;d++){
int nx=u.x+dx[d],ny=u.y+dy[d];
if(nx>=0&&ny>=0&&nx<n&&ny<m&&!vis[nx][ny]&&mp[nx][ny]==0){
vis[nx][ny]=1;
q.push({nx,ny,u.s+1});
}
}
}
cout<<res;
return 0;
}
押题 2(25 分)01 背包入门
n 件物品,容量 v,每件有重量 w 价值 val,求最大总价值。
cpp
#include<bits/stdc++.h>
using namespace std;
int dp[1005];
int main(){
int n,v;
cin>>n>>v;
for(int i=1;i<=n;i++){
int w,va;cin>>w>>va;
for(int j=v;j>=w;j--) dp[j]=max(dp[j],dp[j-w]+va);
}
cout<<dp[v];
return 0;
}
🟤GESP‑7 级(图遍历、二维 DP、哈希、泛洪 FloodFill)
核心考点:图存储邻接表;图 DFS/BFS;FloodFill 连通块;二维 DP;哈希;记忆化搜索;复杂度优化。
押题 1(25 分)连通块计数
n*m 网格,统计连通块数量(8 方向 / 4 方向)。
cpp
#include<bits/stdc++.h>
using namespace std;
int n,m;
int g[105][105];
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
void dfs(int x,int y){
g[x][y]=0;
for(int d=0;d<4;d++){
int nx=x+dx[d],ny=y+dy[d];
if(nx>=0&&ny>=0&&nx<n&&ny<m&&g[nx][ny]==1) dfs(nx,ny);
}
}
int main(){
int cnt=0;
cin>>n>>m;
for(int i=0;i<n;i++)for(int j=0;j<m;j++)cin>>g[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(g[i][j]==1){cnt++;dfs(i,j);}
cout<<cnt;
return 0;
}
押题 2(25 分)二维 DP 最长公共子序列 LCS
字符串 s1,s2,输出 LCS 长度。
cpp
#include<bits/stdc++.h>
using namespace std;
int dp[1005][1005];
int main(){
string a,b;
cin>>a>>b;
int n=a.size(),m=b.size();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
cout<<dp[n][m];
return 0;
}
⚫GESP‑8 级(最短路、最小生成树、区间 DP、组合数学、堆、面向对象基础)
核心考点:Dijkstra、Floyd;Kruskal/Prim;区间 DP;组合计数;堆;BST;类与对象;时间复杂度分析。
押题 1(25 分)堆优化 Dijkstra 单源最短路
n 点 m 边,求 1 号点到各点最短距离。
cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,int> pli;
vector<vector<pair<int,int>>>e;
const ll INF=1e18;
int main(){
int n,m;cin>>n>>m;
e.resize(n+1);
for(int i=1;i<=m;i++){
int u,v,w;cin>>u>>v>>w;
e[u].emplace_back(v,w);
}
vector<ll>dis(n+1,INF);
priority_queue<pli,vector<pli>,greater<pli>>pq;
dis[1]=0;pq.push({0,1});
while(!pq.empty()){
auto[d,u]=pq.top();pq.pop();
if(d>dis[u])continue;
for(auto[v,w]:e[u]){
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
pq.push({dis[v],v});
}
}
}
for(int i=1;i<=n;i++){
if(dis[i]==INF) cout<<"-1 ";
else cout<<dis[i]<<" ";
}
return 0;
}
押题 2(25 分)Kruskal 最小生成树
n 个点 m 条边,求最小生成树总权值,无法生成输出‑1。
cpp
#include<bits/stdc++.h>
using namespace std;
struct Edge{int u,v,w;};
vector<Edge>es;
int fa[100005];
int find(int x){return fa[x]x?x:fa[x]=find(fa[x]);}
bool cmp(const Edge&a,const Edge&b){return a.w<b.w;}
int main(){
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=0;i<m;i++){
int u,v,w;cin>>u>>v>>w;
es.push_back({u,v,w});
}
sort(es.begin(),es.end(),cmp);
ll sum=0;int cnt=0;
for(auto&e:es){
int fu=find(e.u),fv=find(e.v);
if(fu!=fv){
fa[fu]=fv;
sum+=e.w;cnt++;
}
}
if(cntn-1)cout<<sum;
else cout<<-1;
return 0;
}
备考提醒
1‑4 级重点练语法、边界、输入输出格式;5‑8 级重点练模板 + 读题 + 调试。
考试全部用#include<bits/stdc++.h>,using namespace std;,少写直接丢分。
8 级可以参加 CSP‑J 报名(GESP7≥80 或 8≥60)。
CSP-J押题:
⚠️无官方真题,基于近 5 年真题趋势押题,题型严格复刻 CSP‑J:T1 简单数学模拟;T2 前缀和 / 贪心;T3 大模拟 / 字符串;T4DP / 搜索,每道 100 分,考试要写文件读写freopen。
T1【数学模拟|100 分】(必拿分,对标历年 T1)题目:倍数计数
给定两个正整数 (n,k),统计 (1\sim n) 里面,是 k 的倍数,但不是 (k^2) 的倍数的数字一共有多少个。输入:一行两个整数 (n,k)。(1\le n \le 10^6,2\le k\le1000)
样例输入plaintext20 2
样例输出plaintext5
解释:2,6,10,14,18;排除 4,8,12,16,20。cpp#include<bits/stdc++.h>
using namespace std;
int main(){
// freopen("count.in","r",stdin);
// freopen("count.out","w",stdout);
int n,k;
cin>>n>>k;
int a=n/k;
int b=n/(k*k);
cout<<a-b<<endl;
return 0;
}
T2【前缀和 + 贪心|100 分】(中档,区分基础选手,对标历年 T2)题目:区间最大和
给定长度为 n 的数组,求长度恰好为 m 的连续子数组的最大总和。
输入:第一行 (n,m);第二行 n 个整数。(1\le m\le n \le 10^5)。
样例输入plaintext6 3
1 2 3 4 5 6
样例输出plaintext15
cpp#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
// freopen("maxsum.in","r",stdin);
// freopen("maxsum.out","w",stdout);
int n,m;
cin>>n>>m;
vector<ll>a(n+1),s(n+1,0);
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
ll ans=-1e18;
for(int i=m;i<=n;i++){
ans=max(ans,s[i]-s[i-m]);
}
cout<<ans<<endl;
return 0;
}
T3【字符串 + 模拟|100 分】(分水岭大模拟,对标历年 T3)题目:字符压缩解码
有一种行程编码规则:数字后面跟若干字符,代表把字符重复数字次。
例如:3ab 代表 ababab;2xy输出xyxy。
输入一行字符串,只包含数字 (1‑9) 与小写字母,保证合法,输出解码后的字符串。
注意:数字只是一位数字。样例输入plaintext2a3bc
样例输出plaintextaabcbcbc
cpp#include<bits/stdc++.h>
using namespace std;
int main(){
// freopen("decode.in","r",stdin);
// freopen("decode.out","w",stdout);
string s,res;
cin>>s;
for(int i=0;i<s.size();){
if(isdigit(s[i])){
int t=s[i]-'0';
i++;
char ch=s[i];
for(int j=1;j<=t;j++) res+=ch;
i++;
}else{
res+=s[i];
i++;
}
}
cout<<res<<endl;
return 0;
}
T4【01 背包 DP|100 分】压轴题(对标 CSP‑J T4 难度)题目:挑选物品
有 n 件物品,每件物品有重量 (w_i),价值 (v_i)。背包总容量为 V,每个物品只能选一次,求背包可以装的最大总价值。
数据范围:(1\le n\le 500,1\le V\le500)。样例输入plaintext4 8
2 3
3 5
4 6
5 7
样例输出plaintext11
cpp#include<bits/stdc++.h>
using namespace std;
int main(){
// freopen("bag.in","r",stdin);
// freopen("bag.out","w",stdout);
int n,V;
cin>>n>>V;
vector<int>dp(V+1,0);
for(int i=1;i<=n;i++){
int w,v;
cin>>w>>v;
for(int j=V;j>=w;j--){
dp[j]=max(dp[j],dp[j-w]+v);
}
}
cout<<dp[V]<<endl;
return 0;
}
高概率变体备选 4 道(很可能换壳出题)
二分答案:最小最大值类型(CSP‑J 高频)
n 个石头,m 次分割,求分割后最大段的最小总和。
FloodFill 连通块:网格求连通块数量(DFS/BFS 轮换考)
贪心:区间选点:给定若干区间,选最少点覆盖全部区间。
位运算异或:数组求区间异或和(近年热度上涨)
CSP‑J 复赛考场重要提醒
必须写 freopen 文件读写!不写直接 0 分,把注释打开,文件名和题目一致。
大数据范围,求和一定要用long long,int 会爆,T1T2 极易踩坑。
T3 大模拟:仔细读题,很多坑藏在题干细节,样例一定要手算一遍。
T4 拿不到满分就写暴力 DFS,可以拿部分分,不要空题。
时间分配:T1+T2 控制在 1 小时;T3 1 小时;T4 1.5 小时;留 0.5 小时检查边界、文件、变量类型。
全部评论 2
怎么都这么板
4小时前 来自 浙江
0大佬可以押一下CSP-J的题吗?
2天前 来自 山东
0可以吧
2天前 来自 新疆
0好了
2天前 来自 新疆
0大佬好厉害٩(๑>◡<๑)۶
2天前 来自 山东
0



















有帮助,赞一个